定义结构体指针变量和定义结构体普通变量的区别
答案:2 悬赏:40
解决时间 2021-10-09 01:52
- 提问者网友:斑駁影
- 2021-10-08 21:20
定义结构体指针变量和定义结构体普通变量的区别
最佳答案
- 二级知识专家网友:怙棘
- 2021-10-08 21:31
我个人认为当你定义了一个结构指针后,程序实际只是给指针本身分配了机器字长宽度的空间,用来存储一个地址,如果是全局变量或者静态变量的话,默认初始化为0。
结构指针是用来存储将来你真正结构的地址的,而当你刚刚定义指针时,它是没有指向任何结构的,对于你定义的这个指针,它本身的内容实际是0。
而结构变量就不一定了,如果你定义了一个结构变量,那它本身就分配了内存,当然它的内部变量也是分配了内存的。
所以当你定义结构变量时,由于m.fld[0]是有实际地址和空间的,当你strcpy时,就是完全合法的操作,而如果你只定义了指针,并没有分配实际的结构内存,所以当你strcpy的时候,是将数据COPY到0地址,当然访问0地址违法的。 祝你好运一生一世!点击好评,谢谢你!
结构指针是用来存储将来你真正结构的地址的,而当你刚刚定义指针时,它是没有指向任何结构的,对于你定义的这个指针,它本身的内容实际是0。
而结构变量就不一定了,如果你定义了一个结构变量,那它本身就分配了内存,当然它的内部变量也是分配了内存的。
所以当你定义结构变量时,由于m.fld[0]是有实际地址和空间的,当你strcpy时,就是完全合法的操作,而如果你只定义了指针,并没有分配实际的结构内存,所以当你strcpy的时候,是将数据COPY到0地址,当然访问0地址违法的。 祝你好运一生一世!点击好评,谢谢你!
全部回答
- 1楼网友:愁杀梦里人
- 2021-10-08 21:37
当你定义了一个结构指针后,程序实际只是给指针本身分配了机器字长宽度的空间,用来存储一个地址,如果是全局变量或者静态变量的话,默认初始化为0。
结构指针是用来存储将来你真正结构的地址的,而当你刚刚定义指针时,它是没有指向任何结构的,对于你定义的这个指针,它本身的内容实际是0。
而结构变量就不一定了,如果你定义了一个结构变量,那它本身就分配了内存,当然它的内部变量也是分配了内存的。
所以当你定义结构变量时,由于m.fld[0]是有实际地址和空间的,当你strcpy时,就是完全合法的操作,而如果你只定义了指针,并没有分配实际的结构内存,所以当你strcpy的时候,是将数据COPY到0地址,当然访问0地址违法的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯