c 语言程序设计 c 语言

img


为啥最后的结果是这样子?是哪里做了循环吗?函数调用之后有什么需要特殊注意的吗?

你应该是误会了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