当前位置:编程学习 > C/C++ >>

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语言问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,