gpt4 book ai didi

c - 在C中初始化整数指针数组

转载 作者:太空狗 更新时间:2023-10-29 16:40:42 25 4
gpt4 key购买 nike

我对 C 中指针的使用有一些困惑/问题。我将示例代码放在下面以便于理解。请注意这些代码的区别。如果您在理解它时遇到问题,请提供反馈。

这行不通。

#include <stdio.h>
#include <stdlib.h>

void process() {
int *arr;
arr=(int*)malloc(5*sizeof(int));
arr=(int*){3,1,4,5,2};
for(int z=0;z<5;z++) {
printf("%d ",arr[z]);
}
printf("\n");
}

int main() {
process();
return 0;
}

但这行得通。

#include <stdio.h>
#include <stdlib.h>

void process() {
int *arr;
arr=(int*)malloc(5*sizeof(int));
arr=(int[]){3,1,4,5,2};
for(int z=0;z<5;z++) {
printf("%d ",arr[z]);
}
printf("\n");
}

int main() {
process();
return 0;
}

这也行。为什么?我这里没有分配内存。

#include <stdio.h>
#include <stdlib.h>

void process() {
int *arr;
arr=(int[]){3,1,4,5,2};
for(int z=0;z<5;z++) {
printf("%d ",arr[z]);
}
printf("\n");
}

int main() {
process();
return 0;
}

为什么它们不一样?

    arr=(int*){3,1,4,5,2};
arr=(int[]){3,1,4,5,2};

有没有其他方法来初始化整数指针数组,而不是在这种单独的分配方式中使用?

arr[0]=3;
arr[1]=1;
arr[2]=4;
arr[3]=5;
arr[4]=2;

我如何获得指针内存中分配的大小/数量,以便我可以使用类似 for(int z=0;z<NUM;z++) { 的东西而不是 for(int z=0;z<5;z++) {静态的?

非常感谢任何回答。

提前致谢。

最佳答案

前几个示例中的 malloc 调用分配了一 block 内存并将指向该内存的指针分配给 arr。一旦您再次分配给 arr,指针值就会被覆盖,并且您已经失去了对分配内存的跟踪——也就是说,您已经泄漏了它。这是一个错误。

换句话说,如果您使用 malloc() 分配一 block 内存,那么您可以使用数组语法(例如)将数据写入其中:

int* arr = (int *) malloc(sizeof(int) * 5);
for (int i=0; i<5; ++i)
arr[i] = i;

但是您不能将任何其他内容直接分配给arr,否则您会丢失指向该内存块的指针。当您使用 malloc() 分配一个 block 时,不要忘记在您不再需要它时使用 free() 删除它。

数组不是一个指向整数的指针;这是一个数组。当您将数组名称作为参数传递给接受指针作为参数的函数时,数组名称被称为“衰减为指针”,但它们不是一回事。

关于你的最后一个问题:这实际上是数组和指针类型之间的区别:编译器知道数组的大小,但它不知道任意指针指向的 block 的大小-类型。不幸的是,答案是否定的。

但由于您正在编写 C++,而不是 C,所以无论如何您都不应该使用数组:使用 `std::vector'!它们知道自己的长度,而且它们是可扩展的。

关于c - 在C中初始化整数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com