指针数组和数组指针的区别
/*指针数组和数组指针的比较*/
#include <stdio.h>
int main(void) {
char b[4][5] = { //char 是字符型变量,不能使用'10'
{'a','b','c','d','i'},
{'e','f','g','h','j'},
{'1','2','3','4','k'},
{'5','6','7','8','l'},
};
/* 数组指针(把数组的地址给指针)的注意事项 */
char (*p)[5] = b; //数组指针:相当于二维数组
// 若要用一维数组为其赋值,则一维数组需要加取地址符
// 若要用二维数组为其赋值,则二维数组的列必须与数组指针的下标值相等
//把二维数组的地址给指针p,使用(p[i]+j)调用数组b[i][j]的内容
*(p[0]+4) = 'm'; //可以当成二维数组改变数组中某个元素的值
printf("%d",sizeof(p));
printf("%c",*p[0]+10); //输出结果 :k; 先求*p[0] == a, 再算a+10 == k
printf("%c",*(p[0]+4));
printf("%c",*(p[1]+0)); //输出结果 :e;先求(p[0]+4), 再算*(p[0]+4);
/*指针数组的注意事项*/ /*
char * a[4] = {"abcd","cdef","ghij","d"}; //指针数组:定义了1个数组,包含了4个元素,每个元素都是指针类型,并且指向字符串类型
// 指针数组也可以看成是二维数组,但是每一行元素都是字符串
// 可以使用二维数组的使用方法读取字符串中的字符
a[0][1] = 'f'; // error //不能使用二维数组的方式把元素中的某个字符串替换
printf("%s\n",a[0]); // 直接将指针数组中的第0个元素(字符串"abcd")打印出来
printf("%c\n",a[0][0]); // 将指针数组中的0个元素的第0个字符打印出来
printf("%c\n",a[3][0]);
*/
return 0;
}
/*
---------------------------------------------比较总结---------------------------------------------------
相同点 : 数组指针 和 指针数组 都可以看成二维数组
不同点 :
1. 数组指针————————每一行都是 字符
指针数组————————每一行都是 字符串
2. 数组指针————————使用数组为 数组指针 赋值时,数组的列数必须与 数组指针 的列数一致,▲行数不限
指针数组————————使用循环可以为 指针数组 赋值,且字符串的 ▲长度不限
3. 数组指针————————可以当成二维数组改变数组中某个元素的值
指针数组————————可以使用字符串单独为某个行元素赋值,不能为字符串中的某个元素赋值
*/