指针数组与数组指针的本质

来源:互联网 发布:域名不合法是什么意思 编辑:程序博客网 时间:2024/05/22 16:56
数组指针与指针数组有时候不好区分,越想越乱,所以写一篇文章来弄清他们的本质,只要知道了本质,那么用起来就很轻松了

指针数组:   是一个数组,元素为指针;
定义
char* a[4]={"aaaaa","bbbbb","ccccc","ddddd"};
a[i]存储的是字符串的首地址,例如a[1]存储的是字符串“bbbbb”的首地址

printf("%s"a[1]);   //输出bbbbb
printf("%d,%d"a[0],a[1]);//输出的是两个数字,相差4,(内存地址)

可以理解成这样
char* a0="aaaaa";
char* a1="bbbbb";
char* a2="ccccc";
char* a[3];
a[0]=a0;
a[1]=a1;
a[2]=a2;

数组指针:    本质是指针
定义:
char (*p)[4];    //必须这样声明,有的地方说数字可以任意写,只会警告,不会报错,反正我的编译器是报错。
char a[4]="123";
p=&a;   //指向数组a的首地址;

printf("%s",*p);   //输出123
printf("%c",(*p)[1]);   //输出2与   ("%c",a[1])相同;

所以我们可以把
*p看作数组名a,这不是和一般的指针一样吗?
注意:符号[]比符号*的优先级要高,所以要加括号————(*p)[i];

(*p)[i]这种写法并不规范,这样写知识为了让人明白数组指针的本质。
1 0
原创粉丝点击