我遇到了问题。我试图获取int数组中的元素数量,而不传递任何显式参数,只是指向int数组的指针。现在我好奇了:
int * set;
printf("-- %d --", sizeof(set)); //4
set=(int *) malloc(n*sizeof(int));
printf("-- %d --", sizeof(set)); //4
为什么值在malloc未初始化之前和之后的值相同。由于
更新:
有没有办法获得int数组的长度?
答案 0 :(得分:8)
因为sizeof
在编译时被评估并产生set
的类型的大小,所以指向int
的指针。
答案 1 :(得分:6)
没有通用的方法来测量C中指针指向的内存大小,除了字符串按惯例终止的特殊情况。
sizeof
将产生指针的大小(32位系统上4个字节,64位系统上8个字节),而不是指向的内存。
如果要跟踪分配的内存大小,选项为:
int
的最小值或最大值如果您的应用永远不会有效地使用该值。答案 2 :(得分:3)
您正在测量的项目set
是指向整数的指针(int*
)。
指向整数的指针是4个字节。
sizeof
NOT 测量分配给指针的内存量。
它只测量“项目”本身(在这种情况下,指针)。
答案 3 :(得分:0)
指针是32位或64位。
含义4或8个字节。
答案 4 :(得分:0)
int * set;
printf("-- %d --", sizeof(set)); //4
set=(int *) malloc(n*sizeof(int));
printf("-- %d --", n*sizeof(int)); //n*sizeof(int) is the size of your malloc'd memory
希望有所帮助。在你的最后一个语句中,你仍然在询问机器上4个字节的单个整数指针的大小。要获得malloced内存区域的大小,您需要使用与malloc函数内部相同的表达式。
并且整数指针的大小不一定与int本身相同,就像Mat纠正我一样