定义一个指针数组
int *p[100];
sizeof(p)结果为400
我一直认为sizeof(数组名)应该返回的是数组的个数100
如果定义 int **p;
sizeof(p)结果又应该怎么样呢?忽然觉得很迷糊 请大家帮着理解一下sizeof关于数组和指针的用法吧
谢谢

解决方案 »

  1.   

    sizeof返回的是对象占用的字节空间。
      

  2.   

    int **p;ASSERT(sizof(p) == 4);
      

  3.   

    int *p[100]; // sizeof p == 400int **p; // sizeof p == 4; 32位平台sizeof 返回的是所占的 bytes
      

  4.   

    sizeof(p)结果为400 ---你定义的指针数组,每个元素都是一个指针,一个指针铁定是占4个字节32位的,所以是4×100=400.
    如果你定义int **p;那么是指向指针的指针,归根结底它还是一个指针,所以指针肯定是占4个字节,所以是4.
    希望没有说错,呵呵。
      

  5.   

    int *p[100];   100个指针数组,存放100个int*型的指针,所占空间4*100个字节
    int **p;  指向指针的指针,占4个字节,所以  sizeof(p)=4
      

  6.   

    sizeof(p) = 100 * 4(int点4个字节)
      

  7.   

    一个指针占四位.100个当然是400
    int test(int *p[100])  这个函数里的你觉得是多少呢?这个时候是等于四的..糊涂了吧...是因为你基本概念不清楚.
      

  8.   

    确实基本概念没搞清吧,sizeof不管多大,返回的数量单位始终是byte
      

  9.   

    sizeof返回占用的内存的字节数。int *p[100];  //你定义了100个int *,一个int *是4个。这是在32位,64位翻倍int **p 占用四个
      

  10.   

    谢谢各位的回答
    指针占四位我了解
    不明确的是sizeof(数组名)返回的是数组个数 还是实际占有的空间(bytes)int arr[100];
    sizeof(arr)也应该是400?
      

  11.   

    int *p[100]; p是一个指针数组,sizeof(p)是求数组占用内存的字节数,数组元素为int *, int *在32位系统下占用4byte, 所以大小为4×100
    int p[100] sizeof(p), 数组元素为int,在32位下int 也占用4byte, 所以也是4*100在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。   
    A.   参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节,在32位系统中占4个字节。   
    B.   参数为数组或指针。下面举例说明.   
    int   a[50];   //sizeof(a)=4*50=200;   求数组所占的空间大小   
    int   *a=new   int[50];//   sizeof(a)=4;   a为一个指针,sizeof(a)是求指针   
    //的大小,在32位系统中,当然是占4个字节。   
    C.   参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意,第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。   
    第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。   
    下面举例说明,   
    Class   Test{int   a;static   double   c};//sizeof(Test)=4.   
    Test   *s;//sizeof(s)=4,s为一个指针。   
    Class   test1{   };//sizeof(test1)=1;   
    D.   参数为其他。下面举例说明。   
    int   func(char   s[5]);   
    {   
    cout<   
    //数的参数在传递的时候系统处理为一个指针,所   
    //以sizeof(s)实际上为求指针的大小。   
    return   1;   
    }   
    sizeof(func(“1234”))=4//因为func的返回类型为int,所以相当于   
    //求sizeof(int).