你应该是误会了C语言p=d++这一句,看我加的注释就明白了。
#include <stdio.h>
void fun(int p)
{
int d=2;
//C语言中p=d++,相当于执行了p=d,然后执行d=d+1
p=d++;
//输出p的值,为2
printf("%d",p);
}
int main()
{
int a=1;
// 调用函数,a的值并未改变
fun(a);
// 执行完成后,a==1,这一句输出a的值1,最终结果2和1连在一起,输出结果21
printf("%d\n",a);
return(0);
}
首先p=d++是先执行p=d,然后执行d=d+1,因此函数调用后输出的p值还是2,不是3
其次函数参数是值参,因此传入变量a的值不会被函数改变,因此输出a还是1
该回答引用ChatGPT
首先在 main 函数中定义了一个整型变量 a 并赋值为 1。接着调用了 fun 函数并将 a 的值作为参数传入。在 fun 函数中,定义了一个整型变量 d 并将其初始化为 2,然后将 d 的值赋值给 p。这里需要注意的是,这里使用的是后缀自增运算符 ++,因此 d++ 表示先将 d 的值赋值给 p,然后再将 d 的值加 1。因此,执行完语句 p=d++ 后,p 的值为 2,而 d 的值为 3。最后在 fun 函数中输出了 p 的值为 2。
回到 main 函数,因为 fun 函数中传入的是 a 的值,而不是 a 的地址,所以 fun 函数中对 p 的修改不会影响 a 的值。因此,执行完 fun(a) 后,a 的值仍然为 1。最后在 main 函数中输出了 a 的值为 1。
注意p++是先返回,再自增。还有就是调用函数的传入参数问题。
对于题目中
a=1,调用fun(a)后,传入参数1,所以p等于1,然后p=d++,p=2,然后d=3。a作为参数,值传入函数,本身不会改变。所以就是答案B