c语言未赋初值的结构体指针详解

最近看到了结构体指针的内容,发现未赋初值的结构体指针的特性很有意思,做一个文档记录一下。

首先看如下代码

#include <stdio.h>
#include <cstdlib>
#include <cstring>

int main()
{
  struct PERSON{
    char *name;
    int age;
    float salary;
  } *p;
  p = (struct PERSON *) malloc(sizeof(p));
  //p->age = (int*) malloc(5);
  //p->age = 27;
  //strcpy(p->name, "marry");
  printf("%d\n", sizeof(p));
  printf("%d\n", &(p));
  printf("%d\n", &(p->name));
  printf("%d\n",&(p->age));
  printf("%d\n",&(p->salary));
}

输出为

8
6422040
10556384
10556392
10556396

可以看到P和构造体内的元素的地址都已经分配了。
但是如下代码

#include <stdio.h>
#include <cstdlib>
#include <cstring>

int main()
{
  struct PERSON{
    char *name;
    int age;
    float salary;
  } *p;
  p = (struct PERSON *) malloc(sizeof(p));
  //p->name = (char*) malloc(5);
  p->age = 27;
  strcpy(p->name, "marry");
  printf("%d\n", sizeof(p));
  printf("%d\n", &(p));
  printf("%s\n", p->name);
  printf("%d\n", p->age);
  printf("%d\n", p->salary);
}

输出却是什么都没有。
如果加上中间给name分配内存的那一句的话

8
6422024
marry
27
0

就会输出结果。

至于原因我理解是虽然已经给指针P分配了内存,但是这个是构造体整体的内存空间。如果构造体内部还存在指针变量,则需要另外的为这个指针变量分配内存。如果构造体内不没有指针变量,则不需要分配内存就可以直接赋值。我觉得这里的构造体内部元素的指针和构造体指针没有关系导致的这个结果。我本人也是小白,如果有哪位大神知道具体原因,还请告知。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值