C语言SWAP的问题

[复制链接]
查看11 | 回复1 | 2013-1-24 11:55:38 | 显示全部楼层 |阅读模式
我觉得你连基本的函数还没搞明白,建议先把函数调用,参数传递搞清楚了再学指针。这明显不是正确调用函数的方式 swapmm(double *p, double *q, double t=0.0);还有,程序中逻辑也存在问题:for(p=a;pa+6;p++)*p=a;这句是想干什么?if(fabs(a)max)max=a;if(fabs(a)min)min=a;如果给一组数:-4,1,2,3,5,-6按你的逻辑给出的,数组中最大值是-6, 最小值是-4,明显不对吧。看程序,你想做的应该是输入6个数,取其绝对值的最大最小,swapmm想做什么倒是没想到。建议你先不用指针重写一次这个程序,达到目地后,再用指针改写。赞同0|评论
回复

使用道具 举报

千问 | 2013-1-24 11:55:38 | 显示全部楼层
数组定义了一个连续的内存块用来保存数组变量,当数组被使用的时候,数组名会退化成指向内存中第一个数组元素的指针。但是数组名不是一个变量,就是说他的值是不能被改变的,因为他指向的数组的第一个元素,如果改变了,指向了别处,那你原来的数组怎么办。例如:double array[10]; double *ptr = array; 这个是对的,array退化成指向double的指针,然后把他指向的地址赋值给ptr*array = 1.0; 这个也是对的,首先array是个指针,然后对他解引用得到他指向的地址的变量,然后我们把1.0赋值给他。array = ptr; 这是错误的,因为array是一个指向数组第一个元素的指针,而且不能被改变,所以向他赋新的地址值会出错,因为他不是个变量。再说一下,C语言为什么要把数组退化成指针,一方面这样方便了函数间传递数组,二是数组的存储在内存里是连续的,这样就可以用指针从第一个元素索引直到最后一个,而且指针的速度很快,优化也容易。至于你这个程序,在函数调用里声明变量,C89里是不允许,C99允许但很多的编译器还没有完全支持C99, 现在C11也出来了。你的这一句swapmm(double *p, double *q, double t=0.0);最好改为swapmm(p, q),把swapmm改成这样:void swapmm(double *p, double *q){
doible t=*p;
*q=*p;
*q=t;}t是个临时变量没有必要传递,这接在函数里定义。赞同0|评论
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行