c - 如何从指针获取信息

标签 c arrays function pointers return

这是我的代码:

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/

相关文章:

c - 变量声明的行为如何?

c - c中的逻辑运算和预递增

javascript - 将包含一个元素的数组拆分为包含多个元素的数组

python - 函数的输入对象将被return覆盖

C - 不循环地递归查找子集和

java - SDL_SetVideoMode 试图释放一个没有被 malloc 的指针(?)

c++ - C++中字符和整数数组的不同行为

c - 如何获得二维数组的总和?

C# 使类返回其实例而不带函数或变量

jquery - 新定义函数中参数的命名空间