首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

typedef struct 内存结构有关问题

2014-01-01 
typedef struct 内存结构问题请看如下定义:typedef struct{int *p1int *p2int *p3int *p4}DataType, *

typedef struct 内存结构问题
请看如下定义:

typedef struct
{
   int *p1;
   int *p2;
   int *p3;
   int *p4;
}DataType, *pDataType;

这种形式的数据,在内存中是不是像数组那样连续存放着?


那么下面这个数据结构(注意元素都是指针),也会是连续的吗?
typedef struct
{
   int *p1;
   short *p2;
   char *p3;
   double *p4;
}DataType, *pDataType;

请问,这种 typedef struct 的类型,是不是和数组一样的形式,在内存中进行组织存放?
不同的运行环境,是不是都是一致的?
谢谢!
[解决办法]



这里就涉及了两个问题:
typedef struct
{
  short *pHead;
  short *pF;
  short *pMid;
  short *pL;
  short *pTail;
}DataType, *pDataType;

DataType obj;

这里头的 pHead 等指针,为何只占用两个字节?  第二,为何 &obj这种值,和pHead、pTail等连续不上?

这里有2个误区。
首先0x0018ff14,这就是4个字节。
第二,pHead、pTail等是short类型的指针,他们所指向的内存空间占用的字节是2个,但是这个地址本身占用的是四个字节。楼主要比较的不是用&obj和pHead、pTail等比较,而是要用&obj和&(obj.pHead)、&(obj.pTail)等进行比较
[解决办法]


这里就涉及了两个问题:
typedef struct
{
  short *pHead;
  short *pF;
  short *pMid;
  short *pL;
  short *pTail;
}DataType, *pDataType;

DataType obj;

这里头的 pHead 等指针,为何只占用两个字节?  第二,为何 &obj这种值,和pHead、pTail等连续不上?


37楼已经解释清楚了.
pHead后面显示的只是其值, 而不是其本身的指针. 要得到本向指针, 需要取地址. 
不连续是因为给&obj是指向obj对象本身分配的地址, 而pHead是指向的另一个变量的地址, 你甚至可以给它赋值为NULL, 你想它还可能跟&obj连续吗? 
也许你看看其反汇编代码, 可能会更容易理解些.

热点排行