我也举个例子,一个函数最多返回1个值,你想返回2个值怎么办?int A(int a,int b){ a++; return b+1;}这个时候,你想用a和函数返回值(b+1)来取的2个返回值,但是由于作用域,你会发现函数外面的a还是原来的值,改成下面的,就可以了int A(int *a,int b){ *a++; return b+1;}----------------------------------你做了个机器人程序,这个机器人是有AI的,而且这个机器人的AI是可以变化的,那么我们会定义:void robot()/*机器人的运动函数*/{ { /*AI*/ } /*其他运动代码*/}你写出了一个非常聪明的机器人,现在你的老大,要你写个同样的笨蛋机器人出来,你怎么做?修改AI部分让他变傻?如果代码很复杂,你会迷失在你自己的代码里,你说把AI提取出来,写成一个函数,那么新AI是另一个函数,不就可以了码?但是,你还是要改动运动函数里面的调用吧,代码一多,你照样迷失~,怎么办(这里有XD会说,用class啊,你老大说,我们公司没有C++~~)那么你可以这么定义来解决问题:void robot(void (*AI)()){ *AI(); /*其他运动代码*/}这个时候你的聪明AI可以这么定义:void ai1(){}那个笨蛋可以这么定义:void ai2(){}在你的代码调用运动代码的时候,你需要一个聪明的机器人就可以这么调用:robot(ai1);笨蛋的那个就可以这又么用了:robot(ai2);这个说的高一点,就是后来接口的实现方式,说的差一点,就是把函数地址做参数,推广一下,所有的回调函数的实现都是这样的,再按个好名字:EVENT,就是伟大的事件驱动了..要卖钱?好,商业化的流行名字:委托~,这些看起来很高深的东西,其实底层,就是这么个小小的指针在起作用.这样,你以后不关怎么改动,robot()本身可以不用动,这个,也是指针的好处,指针是很强大的东西,也是C里面最大的魅力(很多人看法完全相反呵呵),希望上面的描述能给LZ一点点启发呵呵
指针用处就大了,字符串就是指针,如果你需要一个非常大的字符串,那么通常会用malloc分配一个空间存放。另外使用C++的多态性和虚函数,可以实现很灵活的功能,这个属于深入编程内容,适用多态性和虚函数必须要使用指针。
不行了,下面举一例main(){char *cp[6]={"red", "green", "blue", "white" , "yellow", "black" }; int i,j,k; char *temp; for(i=0;i<6;i++){k=i; for(j=i+1;j<6;j++) if(strcmp(cp[j],cp[k])<0) k=j; if(k!=i) {temp=cp[i];cp[i]=cp[k];cp[k]=temp;}} for(i=0;i<6; i++) printf("\n%s",cp[i]); }
指针很有用的,其实指针就是地址.指针变量是个特殊变量,里面存放的是指针,也就是地址.当你学过数据结构以后,就会知道用处了.在C中,调用函数是用值传递的,所以无法返回变量.举个例子,在C中,如果要交换两数,如果不用指针怎么实现啊.没有办法实现.用指针可以这样.void swap( int *x ,int *y){ int temp ; temp = *x; *x=*y; *y=temp}我觉得潭浩强那本书不错.有句话叫指针是C的精华,慢慢体会吧.