int *change(int*a,int b){int c=30;*a=~(1<<2);b=20;return &c;} int main(void) {int a=1;b=2;int *c;c=change(&a,b);printf("0x%X,%d\n",a,b);printf("%d\n",*c);return 0;}输出结果
时间: 2024-03-19 13:46:31 浏览: 62
int main和int main(void)区别
3星 · 编辑精心推荐
这段代码的输出结果为:
```
0xFFFFFFFB,2
30
```
原因是:
首先,在 `change` 函数中,变量 `c` 是一个局部变量,它的地址被返回给了 `main` 函数中的指针 `c`。但是,当 `change` 函数执行完毕后,变量 `c` 所在的栈帧被销毁,`c` 指向的地址变成了未定义行为。
其次,在 `change` 函数中,对于指针 `a` 所指向的值进行了取反操作,并未改变主函数中变量 `a` 的值,只是改变了 `a` 所指向的值。
最后,在 `change` 函数中,变量 `b` 被赋值为 `20`,但是这个操作也不会影响主函数中变量 `b` 的值,因为 `b` 是按值传递的,即将 `b` 的值传递给了 `change` 函数的形参,形参 `b` 的改变并不会影响变量 `b` 的值。
阅读全文