C语言 分配数组,使用for循环初始化给定的任何分配大小

u7up0aaq  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(137)
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(它本身和它所指向的)。但我不知道如何让它达到分配的大小,而不仅仅是本地的大小。
我是初学者所以...我想这里面有用处,如果没有请告诉我。

3npbholx

3npbholx1#

表达式sizeof(p_numbers) / sizeof(*p_numbers)不适用于指针,只适用于已定义的数组。你不能从指针中确定分配的数组的大小,你必须用一个单独的变量来跟踪分配的大小,或者像分配时一样使用常量10

相关问题