提问人:Shaler 提问时间:9/26/2023 最后编辑:chqrlieShaler 更新时间:9/26/2023 访问量:49
分配数组,使用 for 循环初始化给定的任何分配大小
Allocating an array, using a for loop to initialize given any allocated size
问:
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 个整数(本身及其指向的内容)。 但我不知道我如何让它达到分配大小的大小,而不仅仅是本机数字。
我是初学者,所以..我想这有用,如果没有,请告诉我。
答:
2赞
chqrlie
9/26/2023
#1
该表达式不适用于指针,仅适用于定义的数组。您无法从指针确定已分配数组的大小,您必须使用单独的变量跟踪已分配的大小,或者像使用分配一样使用常量。sizeof(p_numbers) / sizeof(*p_numbers)
10
评论
10
malloc()
sizeof(void*) == sizeof(int*) && sizeof(int*) == sizeof(char*)
10
#define SOMETHING_MEANINGFUL (10)
enum { SOMETHING_MEANINGFUL = 10 };
SOMETHING_MEANINGFUL
malloc
malloc((sizeof *p_numbers) * 10);
10
size=10
malloc(size)
size