这是我的代码:
int *myFunction()
{
int A[3] = {1,2,3};
return A; //this will return the pointer to the first element in the array A
}
int main (void)
{
int A[3];
A = myfunction(); //A gets the return value of myFunction
for(int j=0; j==2; j++)
{
B[j] = 2* A[j]; //doubles each value in the array
}
printf("%d",B);
return 0;
}
但这不起作用,因为返回的 A 不是实际的 vector 。如何在主函数中获取实际的 vector {1,2,3}?
最佳答案
函数myFunction
分配A
,但此分配仅存在于 scope 内的函数。当函数返回内存时持有 A
被摧毁了。这意味着该函数返回一个指向尚未取消分配的内存的指针。
问题在于变量A
不会在函数之外持续存在。您可以使用全局变量或将指向缓冲区的指针传递到 myFunction
全局变量方法:
static int A[3];
int* myFunction()
{
A[0] = 1; A[1] = 2; //etc
return A;
}
在此示例中,因为 A
是全局的,A
指向的内存在程序的整个生命周期中持续存在。因此返回指向它的指针是安全的...
顺便说一句,全局变量可能不应该以这种方式使用......这有点笨拙。使用static
关键字意味着 A
在此模块(C 文件)之外将无法访问。
指针方法:
void myFunction(a[3])
{
a[0] = 1; a[1] = 2; //etc
}
int main()
{
myA[3];
myFunction(myA);
// and continue to print array...
}
在此示例中 main()
函数分配myA
。该变量在函数执行时存在(它是 automatic variable )。指向数组的指针被传递到函数中,该函数填充数组。因此main()
函数可以从 myFunction()
获取信息.
另一种创建变量 myA
的方法persist 是将其分配在堆上。为此,您可以执行类似 int *myA = malloc(sizeof(int) * NUMBER_OF_INTS_IN_ARRAY
的操作。然后,该内存将持续存在,直到您使用free()
专门销毁它为止。或者你的程序结束。
关于c - 如何从指针获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405077/