华清远见c语言学习笔记四

/*
 * 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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值