#include<stdio.h>
int main() {
const char* p1[5] = { "please","tell","me","the","story" };
int i;
for (int i = 0; i < 5; i++) {
printf("%s\n", p1[i]);
}
}
数组里的每个元素都是char*类型,读取字符串则根据其地址读取,p1[i]则对应的是存储地址,不可通过指针解引用获取。
二维数组和指针
同一维数组和指针一样,二维数组和指针也有相同的对应关系
*(array+i)+j
表示第 i 行第 j个元素的地址?当*(array+i)
单独使用时表示的是第 i行数据,放在表达式中会被转换为第 i行数据的首地址,也就是第 i 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的指针;
#include <stdio.h>
int main()
{
int array[2][3] = { {1,2,3},{4,5,6} };
int(*p)[3] = array;
// **(p+1)=array[1][0]=4
printf("**(p+1)=%d\n", **(p + 1));
printf("**(array+1)=%d\n", **(array + 1));
//*(*(p+1)+2)=array[1][2]=6
printf("*(*(p+1)+2)=%d\n", *(*(p + 1) + 2));
printf("*(*(array+1)+2)=%d\n", *(*(array + 1) + 2));
printf("array[1][2]=%d", array[1][2]);
}
验证结果: