最近在准备复试的上机考试,顺便帮大一小孩做C语言作业。
其中有一道题目是将五个单词排序后输出
想到了利用<string.h>库函数中的strcmp,但是逐一比较只能找到最大值或最小值,没有想到解决的办法。
于是,想到了冒泡排序,
如果能用一个指针数组*p[5]指向这五个单词的数组,
就可以利用冒泡排序将指针数组内部进行排序了,
*p[0] ~p[5]分别指向由小到大的单词数组首地址,最后按照p数组的排序进行输出就可以了。
于是尝试着定义了指针数组,找到了一个不报错的定义方式。
起初定义的是:
char p[5] = {&a[10],&b[10],&c[10],&d[10],&e[10]};
想法是:数组p中存放的是abcde数组的首地址,
但是系统报错了,
报错信息是: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
大概是说无效转换,但是…从逻辑上,感觉好像是对的才对…
如果有人愿意解答,感激不尽 T ,T
char *p[5] = {a,b,c,d,e};
这种定义方式是正确的。(但是还不懂为什么…)
根据数组定义,a和&a都表示数组首地址,
所以该语句的解释应该是:将a的地址赋给p中存储的内容(地址)所指向的值???
但是根据下面打印出的内容:
p[0]中存储的是a[0]的地址,*p[0]代表a[0]的内容
p[0]存储的值是a的首地址,和打印a的结果是一样的
puts(a)和puts(p[0])是一样的效果,函数的参数都表示数组a的首地址