H5W3
当前位置:H5W3 > 问答 > 正文

刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

这样的写法不能打印内容刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

换成这个就能打印了刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

这两种写法有什么区别吗?

回答

struct teacher{
char* name;
int age;
} tec;
//64位程序,字节对齐后16个直接大小
cout << sizeof(tec) << “::” << sizeof(struct teacher) <<endl;

struct teacher* t = (struct teacher*)malloc(sizeof(tec));
t->name = (char*)malloc(sizeof(char)*5);
//如上分别申请结构和字符串的空间,字符串长度只要比“牛玲”长度+1,不发生缓冲溢出就没问题

printf("%p %p\n", t->name, t);
//这个可看地址的分配情况
strcpy(t->name, "牛玲");
t->age =19;
printf("%s %d\n", t->name, t->age);
free(t->name);
free(t);

fflush(stdout);

输出结果
16::16
0x55bdb8eaf050 0x55bdb8eaf030
牛玲 19

贴的图可见无论10还是20,字符串没有问题,整个过程是对的,问题不是发生在这里,可能是上下文其他地方不对了吧

本文地址:H5W3 » 刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址