以下是引用a563622106在2011-2-20 14:14:44的发言:
数组这些我都会用,上面的那个程序的a,b,我可以用数组a【2】来代替,这样就可以返回给主函数,
其实我说的指针式指 *p这种形式的
楼主,你的概念里有三个主要的问题:
1、C语言中的子函数,不是只能被一个函数调用的。一个子函数一旦写成,那就应该可以在任何可以调用它的地方调用。也就是说,Exchange()函数,不单单可以被main()函数调用,其实也可以被其它的,希望实现交换数据功能的函数所调用。简单的例子:排序(假设对数组int ar[10]。在实现排序的时候,我们要进行很多次调用,要交换的可能是ar[i]、ar[j],这里的i,j是可变的。如果你用a[2]来替代了,那么只能对a[2]的两个元素交换,而对任何其它数组,你的函数就无能为力了。再考虑库函数,众多的库函数,我们可以在任何C文件中,按照自己的要求来调用,决不会局限于某一种特定的情况(就是你所说的a[2])!而这才是函数存在的意义(用术语说,这叫软件的复用度,也是《软件工程》这门课所追求的目标之一,其主要目的是,强调代码可重复实用,以降低软件开发成本)。
2、就算Exchange()中,你用int a[2]作为形式参数,例如:
void Exchange(int a[2])
{
...
}
相信你应该懂得形参与实参应保证类型的一致性,那么请你回去实践我下面的程序段:
#include<stdio.h>
void Exchange(int a[10]) //函数的作用在这里是次要的,主要要讨论形参和实参的问题
{
printf("在Exchange中,a 占用%dB\n",
sizeof(a));
//
这个输出结果应该是4B,如果你用TC,那么就是2B了,但绝对不会是40B!这其实就是说明,形式参数都是变量,根本不可能是数组!而这个例子中,
a的本质就是int *a!形式为二维数组的形参也是一样的!请上机验证!
}
int main(void)
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("在main()中,a 占用%dB\n", sizeof(a));
//这个输出结果应该是40B,说明main()中的a才是真正的数组!
Exchange(a);
}
3、问楼主一个尴尬的问题:你现在所编写的程序,在一个C文件中,有超过200、300行以上的么?
我大胆地猜测,应该没有。而这就是第三个问题。楼主,你现在所编写的程序,仅仅是练习,根本谈不上实用。也因为如此,你所面对的问题(题目,或者干脆些说,就是考试题目)都是复杂度很低的,很多实用功能的程序所涉及的困难都没有出现。再加上你的那位“老师”(我之所以打引号,你应该明白是什么意思!)的“诱导”,才让你误入歧途。
真正有实用性的程序,其所实现的功能必然不可能简单,那么指针在那里,必然是不可或缺的有力武器!
最后要说,指针存在的理由我已经在我的回帖中讲明白了,而作为“软件”专业的你,千万不要再继续错下去了!
[
本帖最后由 犬虫门心 于 2011-2-20 21:13 编辑 ]