我不知道如何在标题中很好地描述我的困惑。为什么指针会在退出函数后恢复?
我有一段如下的C代码:
#include <stdio.h>
int fun(int arr[]) {
printf("%d %p\n", arr[0], arr);
arr = arr+1;
printf("%d %p\n", arr[0], arr);
}
int main(void) {
int arr[2] = {10, 20};
fun(arr);
printf("%d %p\n", arr[0], arr);
return 0;
}
猜猜是什么输出?
10 0x7ffe0a638520
20 0x7ffe0a638524
10 0x7ffe0a638520
好了,似乎地址乐趣()的确发生了变化,但是,它退出后恢复的功能。
是因为fun()中的arr只是main()中真实arr的副本?
'int fun(int x){x = x + 1; } int main(void){int x = 5;有趣的(X); printf(“%d \ n”,x);返回0; ''你期望产生什么输出? –
@OliverCharlesworth不够公平......我很愚蠢。 –
简而言之,'arr'的基地址被复制到'fun()'中的一个本地指针(函数参数可以被视为方便初始化的局部变量)。这里只修改局部变量。因此输出 –