不经意发现原来char *a[1]-char *a[4]用sizeof计算出来都是4,原来每次都是以4个单位分配的...

解决方案 »

  1.   

    楼主算的是指针的size吧
    指针都是32位的
      

  2.   

    你的什么系统啊?
    char *a[1]

    char *a2[4]
    用sizeof计算不可能一样的
      

  3.   


    先感谢一下。这不对!
    sizeof计算的是实际的内存空间。我实际上是把char a[*]放到一个数据结构里用来发送额外数据的,用sizeof计算的是总体的size,发现在依次修改char a[*]时每次以4个增长,还有就是我定义的数据结构没有写数据对齐语句,所以排除自己的原因。且“计算出来的是指针”的说法我认为是不对的,否则对方只能收到指针的值,而不是实际指向的内容。
    还有一点就是指针大小不会随指向数据的大小变化。
      

  4.   

    up once more
    sizeof(char)?
      

  5.   

    概念不对。
      char szPath[10]={"hhhhhhhh"};
      char*p=szPath;
      int len=sizeof(p);//得到的是指针的size
      int length=sizeof(szPath);//得到的是数组的大小。FYI...
      

  6.   

    这样处理一下,再看:#pragma pack(push,1)
    typedef struct _tagData
    {
      ...
      char a[1];
      ...
    }DATA;
    #pragma pack(pop,1)
      

  7.   

    结构体里不是char *,我的意思是15楼的int length=sizeof(szPath);就别拘泥于指针了,是指向的内容!多谢楼上了
      

  8.   

    对于数组名和数组指针,当用sizeof取大小时,一个是数组大小,一个是指针大小