有关函数参数的传递问题,大家好C/C++ code#includestdio.hmain(){int a1,b2void f(int a,int b)f(a,
有关函数参数的传递问题,
大家好
C/C++ code#include<stdio.h>main(){ int a=1,b=2; void f(int a,int b); f(a,b); printf("%d,%d\n",a,b);}void f(int a,int b){ int temp; temp=a; a=b; b=temp; printf("%d,%d\n",a,b);}
这个函数中我把主函数中的a,b的值传给了函数f,然后在函数f中实现交换,我的理解是:
实际上就是复制a,b的值给函数f中,在f中交换的是a,b的复制品,而实际上主函数中的a,b值没有改变。
我觉得好像只有指针的方法才能把在主函数中的真正的a,b改变。新学C语言,孤陋寡闻,确实很多不会,大家别喷。
再看这个程序
C/C++ code#include<stdio.h>void fun(int s[]){ static int j=0; do s[j]+=s[j+1]; while(++j<2);}main(){ int k,a[10]={1,2,3,4,5}; for(k=1;k<3;k++) fun(a); for(k=0;k<5;k++) printf("%d",a[k]); }
我就是按照同样的思维来,觉得自定义函数中改变的只是数组的复制品,结果我以为就是12345实际上是35745
不知道我描述得清楚吗?不清楚的就问下。
还有一个问题,就是像这种的数组的传递,
我一般就是直接void fun(int s[])这样定义了,但是我看到有人用int (*p)[]这种方法,
我以前理解是我的方法是把数组的数据全部的复制进自定义函数中,这样好像又要计算量,浪费时间之类的。
而int (*p)[]这样方法是把一个地址传进自定义函数中,这样就节省很多计算之类的,
不知道这样的理解对不,
请教各位大侠。
最后,可用分可以用钱买的吗,太多不懂了,又不够分用,别人问的自己又回答不上。
[解决办法]实参传递数组名,其实就是地址传递,在函数中改变形参数组的值,其对应的实参也改变!
[解决办法]数组在作为参数传递时等价于指针. 只会传递数组的地址到函数中, 不会进行拷贝.
[解决办法]一.c语言是用值传递的 所以你传递值给他试图改变他是不行的。
好比我对你说海底有宝藏,但是不和你说位置一样,
你是不可能改变那宝藏的,而对你说位置都你就能改变宝藏的量了。
二.你知道 +=是什么意思不? a += b; --> a = a + b;
三.int (*p)[]不是定义函数,是定义一个指针数组,而void fun(int s[])是定义了一个函数
你可以写成 void fun (*s),其他好像不能省略了
最后说下:多看书。。。