经过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函数外面原来的变量