/*
* test.c
*
* Created on: Jun 29, 2012
* Author: 孙旭
* 华清远见实验室
*/
/*******1********/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#define SIZE 4
typedef struct student{
char name[15];
int num;
int age;
char addr[12];
}ttd;
int main()
{
int i;
ttd stud[4];
int fp;
int len;
int size;
printf("请输入四组数据 --name--num--age--addr--\n");
for(i=0;i<SIZE;i++)
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
if((fp=open("/home/linux/test/list.txt",O_RDWR,0666))==0) //open("打开文件路径名",打开方式,对打开文件的存取方式)
{ //open的头文件<fcntl.h>
printf("cannot open the file\n");
exit(0);
}
else printf("open sucess\n");
for(i=0;i<SIZE;i++)
{
len=sizeof(&stud[i])+1; //write(int fd,void *buf,size_t count)
if(write(fp,&stud[i],len)==0) //write(文件描述符,数据缓冲区,写入的字节数)
printf("file write error"); //write的头文件<unistd.h>
close(fp);
}
if((fp=open("/home/linux/test/list.txt",O_RDWR,0666))==0)
{
printf("cannot open the file\n");
exit(0);
}
for(i=0;i<SIZE;i++)
{
size=read(fp,&stud[i],len); //read(int fd,void *buf,size_t count)
printf("%s\t%d\t%d\t%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
close(fp);
return 0;
}
/*******2*******/
#include<stdio.h>
int main()
{
int age=3;
int *p1=&age;
int *p2=&age+2;
int *r=p2-p1;
printf("%d",r); //=2;
printf("p1=%d\n",p1); //p1=-1079339028
printf("p2=%d\n",p2); //p2=-1079339020
return 0;
}
/******3********/
#include<stdio.h>
int main()
{
char q[]="dfgdf";
printf(q);
printf("\n");
puts(q); //puts函数会自动换行
printf(q);
return 0;
}
/******4*******/
#include<stdio.h>
int main()
{
int *p=(int *)0x234234; //直接给指针赋地址,容易指向一个只读或只写的地址空间
*p=23;
printf("%p\n",p); //不能打印出p的地址
return 0;
}
/********5********/
#include<stdio.h> //结构体与fopen函数的组合使用
#include<string.h>
#define SIZE 2
typedef struct student{
char name[15];
int num;
int age;
char addr[12];
}ttd;
int main()
{
int i;
ttd stud[2];
ttd stvd[2];
FILE *fp;
int len=0;
printf("请输入两组数据 --name--num--age--addr--\n");
for(i=0;i<SIZE;i++)
scanf("%s %d %d %s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
if((fp=fopen("/home/linux/test/list.txt","wb"))==NULL) //fopen(文件路径名,“文件打开方式”) wb二进制文件 wb以写的方式打开
{
printf("cannot open the file\n");
fclose(fp);
}
else
printf("open sucess\n");
len=sizeof(struct student);
for(i=0;i<SIZE;i++)
{
if(fwrite(&stud[i],len,1,fp)!=1)
{
printf("file write error");
fclose(fp);
}
}
fclose(fp);
if((fp=fopen("/home/linux/test/list.txt","rb"))==NULL) //rb以读的方式打开
{
printf("cannot open the file\n");
fclose(fp);
}
len=sizeof(ttd);
printf("len2=%d\n",len);
for(i=0;i<SIZE;i++)
{
if((fread(&stvd[i],len,1,fp))!=1)
printf("--fread error--\n");
else
printf("%-10s%4d%4d%-15s\n",stvd[i].name,stvd[i].num,stvd[i].age,stvd[i].addr);
}
fclose(fp);
return 0;
}
/*******6*******/
#include<stdio.h>
int main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
if(&a[1][0]==(int *)(a+1)+1)
printf("success");
int i;
i=*(&a[0][0]+3);
printf("%d",i);
if((&a[0]+1)==(a+1))
printf("success");
if((a[0]+1)==&a[0][1])
printf("sueeeeee");
int j=0;
printf("%d\n",&a[0]+1);
printf("\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("k==%d\n",&a[i][j]);
return 0 ;
}
/*******7********/
#include<stdio.h>
int main(void)
{
int a[2][2]={1,2,3};
printf("%d\n",**a);
**a=34;
printf("%d\n",**a);
int *p=a[0];
int **x=&p; //**x表示指向指针的指针
printf("%d\n",**x);
return 0;
}
/********8********/
#include<stdio.h>
int main()
{
int a[2][3]={1,2,3,4,5,6};
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d ",*(&a[0][0]+i*(sizeof(a[0])/sizeof(a[0][0]))+j)); //表示a[i][j] 或者*(*(p+i)+j)
return 0;
}
/*******9********/
#include<stdio.h>
int main()
{
char *p="www";
int k=sizeof(p);
printf("%d",k);
puts(p);
printf("%c",p[1]);
return 0;
}
/*******10******/
#include <stdio.h>
#include<malloc.h>
#pragma pack()
typedef struct //结构体要向下对齐
{
char name[10]; //10
char sno[15]; //15 +1
short tt; //2
int age; //4
long get; //4
char sex[10]; //10 +2
struct student *next; //4
}student;
int main()
{
int i=sizeof(student);
printf("%d",i); //52
return 0;
}
/*********5*********/
#include <stdio.h>
#include<malloc.h>
#pragma pack()
typedef struct //结构体要向下对齐
{
char name[10]; //10
char sno[15]; //15 +1
short tt; //2
double k; //8 double型是以4进行对齐的不能以8进行对齐
int age; //4
long get; //4
char sex[10]; //10 +2
struct student *next; //4
}student;
int main()
{
int i=sizeof(student);
printf("%d",i); //60
return 0;
}