c语言问题 指针数组 高手看看
#include<stdio.h>
#include<string.h>
void main()
{
char *p[5]={"aaa","bbb","ddd","ccc","fff"},*t;// 把这行去掉 换成/* */那几行自己输入 为什么不行呢
/* char *p[5],*t; */
int i,j;
/* for(i=0;i<5;i++) */
/* gets(p+i); */
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if( strcmp ( *(p+i), *(p+j) ) > 0 )//这里地址怎么成了*(P+i)和*(p+j) 不是p+i和p+j 吗
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
for(i=0;i<5;i++)
printf("%s\n",*(p+i));
// 怎么这里是*(p+i)输出 如果是*(p+i)是地址的话 感觉地址的取值都一样了
}
答案:把这行去掉 换成/* */那几行自己输入 为什么不行呢
这是因为*p[5]里存的只是字串的地址,而不字串的本身
char *p[5]={"aaa","bbb","ddd","ccc","fff"}//先为字串分配存储空间后,再把字串地址赋给数组
相当于
char *a="aaa";
char *b="bbb";
…………
char *f="fff";
char *p[5]={a,b……f}
if( strcmp ( *(p+i), *(p+j) ) > 0 )//这里地址怎么成了*(P+i)和*(p+j) 不是p+i和p+j 吗
p是指针数组,*p才是存在指针数组中字串的地址。
// 怎么这里是*(p+i)输出 如果是*(p+i)是地址的话 感觉地址的取值都一样了
*(p+i)是指针数组p的内容,而这个内容表示的字串的地址,
是的,地址的取值都是一样的
上一个:C语言:已知:f(1)=1,f(2)=1/(1+f(1)),f(3)=1/(1+f(2)),…,f(n)=1/(1+f(n-1)),求f(50)
下一个:C语言问题