返回信息流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不行吗
这是一条镜像帖。来源:北邮人论坛 / cpp / #74639同步于 2013/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C++对象模型不理解的一个问题
blc
2013/10/19镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 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;
}
我想你没明白我的意思,两种声明方式当然要有不同的使用代码了。我想问这种方式比动态申请内存方式的好处。
【 在 bswgd 的大作中提到: 】
:
: 数组和指针是不能等价替换的,看一下下面代码的运行结果你就知道了。
: #include <string.h>
: ...................
赞!第一次听说这个名词,查了一下:http://blog.csdn.net/code_crash/article/details/4854939
【 在 gsl2011 的大作中提到: 】
: 为了他们在相连的内存地址, 柔性数组。