我要学c第二天

1:结构体定义以及结构体变量声明

//定义,大括号里面的是结构体成员,定义的方法和普通变量定义一致:类型说明符 变量名
struct stu
{
int num;
char name[20];
char sex;
float score;
};


//声明结构体变量
struct stu boy1,boy2;

2:结构体变量的成员的表示方法
boy1.name="god"
我想可以这样理解:把这个结构体变量看作是一个对象,而对象里包含属性(这里所说的成员)简单点就是boy1对象的name属性为god
3:结构体变量的初始化:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
struct stu boy1,boy2;
boy1={102,"Zhang ping",'M',78.5};
boy2=boy1;

4: 结构体型数组的定义,日常中经常会遇到学生对象这样的群体,可以用结构体型数组来表示
struct stu
{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,"Li ping","M",45},
{102,"Zhang ping","M",62.5},
{103,"He fang","F",92.5},
{104,"Cheng ling","F",87},
{105,"Wang ming","M",58};
}

5:一个指针变量当用来指向一个结构体变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构体变量的首地址。通过结构指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。



struct stu boy;
struct stu *pstu;
pstu=&boy


6:结构体指针变量的赋值是把结构体变量首地址赋予该指针变量7:通过结构体指针变量访问结构体变量的各个成员。其访问的一般形式为:(*结构指针变量).成员名或为:结构指针变量->成员名例如:(*pstu).num或者:pstu->num其中(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”8:结构变量.成员名(*结构指针变量).成员名结构指针变量->成员名这三种用于表示结构成员的形式是完全等效的。

9:指向结构体型的数组指针

struct stu
{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,"Zhou ping",'M',45},
{102,"Zhang ping",'M',62.5},
{103,"Liou fang",'F',92.5},
{104,"Cheng ling",'F',87},
{105,"Wang ming",'M',58},
};
main()
{
struct stu *ps;
printf("No\tName\t\t\tSex\tScore\t\n");
for(ps=boy;ps<boy+5;ps++)//指针ps指向boy数组的首地址,每循环一次,指针向后指向下一个boy数组元素
printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
}

10:结构体指针变量(指向一个结构体变量的指针)作函数参数
struct stu
{
int num;
char *name;
char sex;
float score;}boy[5]={
{101,"Li ping",'M',45},
{102,"Zhang ping",'M',62.5},
{103,"He fang",'F',92.5},
{104,"Cheng ling",'F',87},
{105,"Wang ming",'M',58},
};
main()
{
struct stu *ps;
void ave(struct stu *ps);
ps=boy;
ave(ps);
}
void ave(struct stu *ps)
{
int c=0,i;
float ave,s=0;
for(i=0;i<5;i++,ps++)//指针往后移动依次访问结构体数组元素的成员score
{
s+=ps->score; //累加
if(ps->score<60) c+=1;
}
printf("s=%f\n",s);
ave=s/5; //求平均
printf("average=%f\ncount=%d\n",ave,c);
}


11:数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。

12:内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

13:分配内存空间函数malloc
调用形式:
(类型说明符*)malloc(size)
功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。
“类型说明符”表示把该区域用于何种数据类型。
(类型说明符*)表示把返回值强制转换为该类型指针。
“size”是一个无符号数。
例如:
pc=(char *)malloc(100);

14:分配内存空间函数 calloc
calloc 也用于分配内存空间。
调用形式:
(类型说明符*)calloc(n,size)
功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。
(类型说明符*)用于强制类型转换。
calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。
例如:
ps=(struet stu*)calloc(2,sizeof(struct stu));
其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps

15:释放内存空间函数free
调用形式:
free(void*ptr);
功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域

16:
main()
{
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->name="Zhang ping";
ps->sex='M';
ps->score=62.5;
printf("Number=%d\nName=%s\n",ps->num,ps->name);
printf("Sex=%c\nScore=%f\n",ps->sex,ps->score);
free(ps);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值