指针数组
是一个数组,数组里面放的是指针变量,未被赋值的元素值为0
char a = 1;
char b = 2;
char c = 3;
char *p[4] = {&a, &b, &c};
for(int i=0; i<4; i++){
if(p[i] != 0) {
printf("%d %d\n", p[i], *p[i]);
} else {
printf("%d\n", p[i]);
}
}
数组指针
是一个指针,指向一个数组
1. 一维数组
char temp[4] = {1,2,3,4};
char *p = temp;
for(int i=0; i<4; i++){
// 等效的访问形式
printf("%d %d %d %d\n", p[i], *(p+i), temp[i], *(temp+i));
}
// 全部指向了第一个元素
printf("%d %d %d %d\n", p, &p[0], temp, &temp[0]);
2. 多维数组
char temp[][3] = {1,2,3,4,5,6};
char (*p)[3] = temp;
for(int i=0; i<2; i++){
// 第i行首地址
printf("%d %d %d %d\n", p[i], *(p+i), temp[i], *(temp+i));
for(int j=0; j<3; j++){
// 等效的访问形式
printf("%d %d\n", p[i][j], temp[i][j]);
}
}
字符串指针
char *p[7] = { 'A','B', 'C', 'D', 'E', 'F', 'G' };
char *q = "ABCDEFG";
// 相同点:都在栈用,出了作用域则释放
// 不同点:sizeof§=7, sizeof(q)=8,多了结束标志’\0’
// q指向首字母的地址
printf("%s\n", q);
printf("%c\n", q[0]);
// 注意是指针指向的值加1,还是指针加1
printf("%c\n", *q);
printf("%c\n", *q+1);
printf("%c\n", *(q+1));
printf("%c\n", *q++);
printf("%c\n", *q);