求解释运行结果,谢谢。

经过add函数后k依旧是3,为什么不是4呢,麻烦大佬解释下,谢谢啦。(初学c)

#include<stdio.h>
void add(int a);//声明add函数 
int main(void)
{
    int k;
    k=3.4;
    printf("k is %d\n",k);
    add(k);
    printf("after add k is %d\n",k);
    return 0;
}
void add(int a)
{
    a++;
    return;
}
因为函数在执行的时候,会把传进来的参数(实际参数)拷贝一份到堆栈上(在函数内叫做形式参数)
你修改的是堆栈上的副本,所以不会作用到实际参数上。如果你希望改变,就要用指针,虽然指针被当作参数,也是拷贝了一个副本,但是因为指针指向了相同的内存,所以修改这个内存上的变量就会改变调用的函数里的那个变量了。
#include<stdio.h>
void add(int* a);//声明add函数 
int main(void)
{
    int k;
    k=34; //k是整数,如果你写3.4也会被当作3处理的
    printf("k is %d\n",k);
    add(&k);
    printf("after add k is %d\n",k);
    return 0;
}
void add(int* a)
{
    *a = *a+1;
    return;
}

这是最基本的形参实参问题,这样直接传,函数内的形参变量变化,不影响实参的数值,要传递值出函数,用指针。

简单来说,这就是所谓的值传递。 参数传递进去后,在Add函数内部 是 相当于一个新的局部变量。 即使修改了,也不会影响 Add函数外面原来的变量