请您解释为什么下面的代码会产生不同的结果。使用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 );
}
答案 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]
。