|
发表于 2013-3-29 08:26:13
|
显示全部楼层
本帖最后由 L]V[G 于 2013-4-4 09:55 编辑
你应该还没有理解,在c语言中如果想通过调用子函数来改变主函数的值,而且返回一个以上的值,应该使用指针,即 址传递,你使用的方法是值传递,只是把实参的值给了形参,在子函数的过程中,系统临时给形参分配了内存空间,但是一旦子函数结束,返回主函数,那么形参所占的内存空间值就会被释放掉,而无法改变主函数的值。
PS: 提醒一下,以后你发函数的时候,要使用英文格式,特别是标点符号!!!刚才复制了你的程序,差点一口鲜血喷在屏幕上,标点都用错了,只好自己重新打一个,还有要注意程序的风格,这个小甲鱼视屏也有提及。也得感谢你,正在在学指针,给我个机会练练手
下面我给你两个我敲的程序,是我早上起来敲的,有些注释的,要理解好指针,指针其实不难,只是绕了很多圈,要静下心来,慢慢的想,慢慢的出错,慢慢的解决。
- //时间:2013年3月29日 07:55:14
- //功能:把一个数组的基数位的元素和相邻的偶数位的元素调换
- #include<stdio.h>
- void fun(int * p, int n); //函数声明
- int main()
- {
- int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
- int i;
-
- for(i=0; i<10; ++i) //输原来的数组
- {
- printf("%-4d", a[i]);
- }
- printf("\n");
-
-
- fun(a, 10); //调用函数,把数组的基数位的元素和相邻的偶数位的元素调换
-
- for(i=0; i<10; ++i) //输出改变后数组
- {
- printf("%-4d", a[i]);
- }
-
- printf("\n");
-
- return 0;
- }
- void fun(int * p, int n) //使用指针传递的方法
- {
- int i, t;
-
- for(i=0; i<n; i+=2, p+=2)
- {
- t = *p;
- *p = *(p+1);
- *(p+1) = t;
- }
- }
- /*****************************************
- 在vc++6.0上输出的结果为:
- 1 2 3 4 5 6 7 8 9 0
- 2 1 4 3 6 5 8 7 0 9
- Press any key to continue
-
- *******************************************/
复制代码
- #include<stdio.h>
- void fun(int *q); //函数声明
- int main()
- {
- int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
- int i;
- int * p = NULL;
-
- for(i=0; i<10; ++i) //输原来的数组
- {
- printf("%-4d", a[i]);
- }
- printf("\n");
-
- p = a; //p保存的是a数组的地址
- for(i=0; i<10; i+=2) //调用函数
- {
- fun(p+i);
- }
-
- for(i=0; i<10; ++i) //输出改变后数组
- {
- printf("%-4d", a[i]);
- }
-
- printf("\n");
-
- return 0;
- }
- void fun(int *q) //使用指针传递的方法
- {
- int i, t;
-
- t = *q;
- *q = *(q+1);
- *(q+1) = t;
- }
- /*****************************************
- 在vc++6.0上输出的结果为:
- 1 2 3 4 5 6 7 8 9 0
- 2 1 4 3 6 5 8 7 0 9
- Press any key to continue
-
- *******************************************/
复制代码
|
|