int *p_numbers;
p_numbers = malloc((sizeof *p_numbers) * 10);
if (p_numbers == NULL)
exit(EXIT_FAILURE);
for (int i = 0; i < sizeof(p_numbers) / sizeof(*p_numbers); i++) {
printf("-> %p\n\n", p_numbers);
p_numbers[i] = 0;
}
寻找一个可以找到已分配数组大小的操作,这样这个for循环就可以处理任何已分配的大小,而不仅仅是i < 10。
for(i = 0; i < 10; i++)
我目前的尝试是sizeof(p_numbers)只得到8,而不是我预期的40,但是sizeof(*p_numbers)返回的类型大小和我预期的一样。
我的猜测是sizeof(p_numbers)返回8,因为指向一个int的指针的大小总共是2个int(它本身和它所指向的)。但我不知道如何让它达到分配的大小,而不仅仅是本地的大小。
我是初学者所以...我想这里面有用处,如果没有请告诉我。
1条答案
按热度按时间3npbholx1#
表达式
sizeof(p_numbers) / sizeof(*p_numbers)
不适用于指针,只适用于已定义的数组。你不能从指针中确定分配的数组的大小,你必须用一个单独的变量来跟踪分配的大小,或者像分配时一样使用常量10
。