指针与数组问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 22:45:37
有一个函数点定义:
void sort(char (*s)[6])
````````````````````
````````````````````````````
``````````````
if(s[j]>s[j+1]```````/*这时J==8,中间省略的是冒泡算法*/
`````````````````````
我想问的是:s[j]=*(s+j)没错,但是函数调用中定义了(*s)[6],于是搞晕
,像这样看的话,那*s是指向6个元素的啊,后面怎么可以比较?
2.然后,&num[0]=num吗?
3.我喜欢用代码直接思考题目,不喜欢画流程图,这样好么?

1.
只看if(s[j]>s[j+1]感觉有问题,char (*s)[6]是数组指针,s指向一个6个字符的数组,赋值如下
char a[6]="asdfg";
char (*s)[6]=&a;
//char (*s)[6]=a; ×

感觉if(s[j]>s[j+1])会有问题,因为
如果是char (*s)[6]的话那么s[0]是一个地址,打印s[0]和a的结果为“asdfg”,效果和数组名一样。但打印s[1]是乱码,打印a+1却不是,因为a是一个字符数组,一次偏移一个字节,所以a+1将指向“asdfg”中的s,而s[0]或者*(s+1)虽然也只偏移一个单位,但s表示的是指向一个含有6个字符的数组,所以s的一个偏移单位有是6个字节。希望这个对你未来的学习有帮助。

2.
&num[0]和num是一个值

3.
可以,流程这东西就和乘法口诀类似

char (*s)[6]这种定义和直接定义char* s
不一定有区别

折时候J=8要是s[j+1],肯定越界了啊

我几乎看不到流程图了,也从来没画过

第一个问题,(*S)[6]中,*S开始指向六个元素的首地址,之后一直在变化,逐个指向数组中的各个元素,所一以后的也可以比较。第二个问题,&num[0]取的是数组第一个元素的地址,也就是数组的首地址,num也是数组的首地址,这两个地址是一样的。(不过等号不是上面那样的,应该是"==",^_^)。第三个问题,如果你是刚开始学习C语言,最好是画一下,不过在处理联系的时候可以不画,但不要样成这样的坏习惯,这样对以后开发大程序不好。