gpt4 book ai didi

c - 如何从指针中获取信息

转载 作者:行者123 更新时间:2023-12-04 04:32:12 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Returning Arrays/Pointers from a function

(7 个回答)


8年前关闭。




这是我的代码:

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/

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