带数组和指针的Sizeof

时间:2015-04-21 22:13:08

标签: c sizeof

请您解释为什么下面的代码会产生不同的结果。使用netbeans。

    #define SIZE 1

    size_t getSize( float *ptr );

    int main( void ) {

        float array[ SIZE ];
        //not getting the same results??? from sizeof/getSize

        printf( "The number of bytes in the array is %u\n"
                "The number of bytes returned by getSize is %u\n", 
                    sizeof( array ), getSize( array ) );
    }
    //sizeof( array ) prints 4
    //getSize( array ) prints 8

    size_t getSize( float *ptr ) {
        return sizeof( ptr );
    }

3 个答案:

答案 0 :(得分:2)

在main()中,您正在查看" int"的大小。 在getSize()中,您正在查看"指向float"的指针。

根据您想要实际执行的操作,您可能希望使用以下代码。

#include <stdio.h>
#include <stdlib.h>

#define N 17

main()
{
  int       arrayINT[N];
  float     arrayFLOAT[N];

  printf("sizeof int is %d, sizeof of %d elements long array of int is %d, calculated number of elements in this array of int is %d\n",
     sizeof(int),
     N,
     sizeof(arrayINT),
     sizeof(arrayINT)/sizeof(int));
  printf("sizeof float is %d, sizeof of %d elements long array of float is %d, calculated number of elements in this array of float is %d\n",
     sizeof(float),
     N,
     sizeof(arrayFLOAT),
     sizeof(arrayFLOAT)/sizeof(float));
  printf("sizeof pointer to float is %d\n", sizeof(float*));

  exit(0);
}

答案 1 :(得分:0)

因为数组不是指针。

仅仅因为未订阅的数组计算其第一个元素的地址,这不会使它成为指针。

答案 2 :(得分:0)

sizeof不返回内存大小,而是返回数据类型的大小。它在编译时进行评估。

/* this is size of pointer - pointer is 4 byte on 32bit machine and 8 bytes on 64bit machine */
sizeof(float *);

/* this is size of a float, which is 4 bytes */
sizeof(float);

/* this is size of array of floats so it will be N*sizeof(float) */
sizeof(float[N]);

在函数getSize中,您正在评估数据类型float *。在main中,您正在评估数据类型float[SIZE],因此float[1]