gpt4 book ai didi

c - 使用指针在函数内部定义数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:07 24 4
gpt4 key购买 nike

我不明白为什么 arr 没有指向我在函数测试中创建的数组:

void test(int *arr)
{
int tmp[] = {2,4};
arr = tmp;
printf("%d %d\n",arr[0],arr[1]);
}

int main()
{
int *arr;
test(arr);
printf("%d %d\n",arr[0],arr[1]);
return 0;
}

当我运行这个程序时,我得到:

2 4
17744 786764

arr 是指针,为什么不更新值?

更新:现在我明白了,我对函数的指针和局部变量有很多误解。已将我的小哑脚本更新为有效的东西:

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

void test(int *arr){
arr[0] = 123;
arr[1] = 321;

printf("%d %d\n",arr[0],arr[1]);
}

int main()
{
int arr[2];
test(arr);
printf("%d %d\n",arr[0],arr[1]);
return 0;
}

最佳答案

这是因为 C 中的参数是按值传递的。 arr 您传入的 main 只是复制到函数参数 arr
赋值 arr = tmp; 使 arr 指向新位置。现在 arr 指向一个自动局部变量,一旦函数结束它就不会存在。
因此,main

中的语句
printf("%d %d\n",arr[0],arr[1]);  

调用未定义的行为。

将您的功能更改为

void test(int **arr)  // Change parameter to pointer to pointer to int
{
int *tmp = malloc(2*sizeof(int)); // Allocate memory dynamically
tmp[0] = 2;
tmp[1] = 4;
*arr = tmp;
printf("%d %d\n", (*arr)[0], (*arr)[1]);
}

并从 main 调用它作为

test(&arr);

关于c - 使用指针在函数内部定义数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396349/

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