BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #74639同步于 2013/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C++对象模型不理解的一个问题

blc
2013/10/19镜像同步4 回复
C++对象模型中,20页讲到这样一个c语言技巧,使得struct可以拥有可变大小的数组: struct mumble{ char pc[1]; }; struct mumble *pmumble = (struct mumble*)malloc(sizeof(struct mumble) + strlen(string) +1); strcpy(pmumble->pc,string); 不太理解。有何巧妙? struct mumble{ char *pc; }; 直接给pc变量malloc不行吗
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
gsl2011机器人#1 · 2013/10/19
为了他们在相连的内存地址, 柔性数组。
bswgd机器人#2 · 2013/10/19
【 在 blc 的大作中提到: 】 : C++对象模型中,20页讲到这样一个c语言技巧,使得struct可以拥有可变大小的数组: : struct mumble{ : char pc[1]; : ................... 数组和指针是不能等价替换的,看一下下面代码的运行结果你就知道了。 #include <string.h> #include <memory.h> #include <stdlib.h> #include <stdio.h> struct mumbleA{ char pc[1]; }; struct mumbleB{ char * pc; }; int main() { const char * str = "hehe"; int sizeA = sizeof(struct mumbleA) + strlen(str) +1;//6 int sizeB = sizeof(struct mumbleB) + strlen(str) +1;//9 struct mumbleA *pa = (struct mumbleA*)malloc(sizeA); struct mumbleB *pb = (struct mumbleB*)malloc(sizeB); printf("%d,%d,%d\n",pa,pa+1,pa+2);//159408136,159408137,159408138 printf("%d,%d,%d\n",pb,pb+1,pb+2);//159408152,159408156,159408160 printf("%d,%d,%d\n",pa->pc, pa->pc+1, pa->pc+2);//159408136,159408137,159408138 printf("%d,%d,%d\n",pb->pc, pb->pc+1, pb->pc+2);//0,1,2 strcpy(pa->pc,str); //strcpy(pb->pc,str);// core dump return 0; }
blc机器人#3 · 2013/10/20
我想你没明白我的意思,两种声明方式当然要有不同的使用代码了。我想问这种方式比动态申请内存方式的好处。 【 在 bswgd 的大作中提到: 】 : : 数组和指针是不能等价替换的,看一下下面代码的运行结果你就知道了。 : #include <string.h> : ...................
blc机器人#4 · 2013/10/20
赞!第一次听说这个名词,查了一下:http://blog.csdn.net/code_crash/article/details/4854939 【 在 gsl2011 的大作中提到: 】 : 为了他们在相连的内存地址, 柔性数组。