(语法)理解结构指针和动态分配内存

    结构体即我们自定义的数据类型,平时经常用到,结构体指针即将指针加入到一个类型中,理解结构体指针对学习指针可以进一步深入理解,并在链表等格式中运用非常广泛,以下面程序举例分析:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct student{ 
char *name; 
int score; 
struct student* next; 
}; 
student stu;
student* stu1;
int main(){ 
stu.name = (char*)malloc(sizeof(char)); /*1.结构体成员指针需要初始化*/ 
strcpy(stu.name,"Jimy"); 
stu.score = 99; 

stu1 = (struct student*)malloc(sizeof(struct student));/*2.结构体指针需要初始化*/ 
stu1->name = (char*)malloc(sizeof(char));/*3.结构体指针的成员指针同样需要初始化*/ 
stu.next = stu1; 
strcpy(stu1->name,"Lucy"); 
stu1->score = 98; 
stu1->next = NULL; 
printf("name %s, score %d \n ",stu.name, stu.score); 
printf("name %s, score %d \n ",stu1->name, stu1->score); 
free(stu1); 
return 0; 
} 
结构体的定义struct student
{
   char* name;
   int score;
   student* next;
};
    struct用来定义一个结构体类型,后面跟一个类型名字,这里是student(和int,char一样,只是个类型名),在下面的{}中,是这个结构体中的数据类型。第一个是定义了char型的指针变量name,第二行定义了int变量score,第三行定义了我们刚才自定义的数据类型student型的指针变量next。
    下面的student stu;和studeng* stu1;分别定义了student类型的变量stu和student类型的指针变量stu1。
    在下面的主函数中,stu.name = (char*)malloc(sizeof(char));是为变量stu中的指针变量name动态开辟一块内存来给指针变量name使用,右值得意思是:获取char类型的大小,为它动态分配一块内存,并把它强制类型转换为char。最后就把这个开辟出来的内存的首地址作为返回值传递给指针变量name。
    下面的 strcpy(stu.name,"Jimy");就开始为就开始为指针name赋值了,即将字符串“jimy”赋值给变量stu的name。
    下面stu1 = (student*)malloc(sizeof(student))这一句是动态分配一个student类型的内存空间,将他的首地址赋值给指针变量stu1,即stu1就有了一个student类型的内存地址可供使用。
    下面的stu1->name = (char*)malloc(sizeof(char));同样在指针变量stu1内存中的name指针类型也需要将他初始化为它分配一个内存空间以供使用。
    后面的stu1->score = 98; stu1->next = NULL;是为stu1变量中的两个数据类型赋值,注意的是如用指针来便是结构变量,那就可以用->来直接引用该变量下面的对象。
下一篇主要分析结构体指针在链表中的应用及用法,还是要深入理解指针及其用法。




  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值