首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关函数参数的传递有关问题

2012-03-16 
有关函数参数的传递问题,大家好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),其他好像不能省略了
最后说下:多看书。。。

热点排行