二维数组的指针形式
&a[0] 和 &a[0] [0] 等价
a + i //第i行的地址
*(a + i) //第i行首元素的地址
*(*a + i) //第i行首元素的值
a行元素数组的首地址–行地址–二级指针
*a首行第一个元素的地址–列地址–一级指针
下标表示法:a[ i ] [ j ]
指针表示法:* ( * (a + i) + j )
混合运用:* (a[ i ] + j)
使用二级指针方式改写查找奥运五环的位置
#include<stdio.h>
#include<string.h>
int main(){
int i;
char *color [5] = {"red","blue","yellow","green","black"};
char **pc;
char str[20];
pc = color;
printf("给我一个颜色呗~");
scanf("%s", str);
for(i = 0; i < 5; i++){
if(strcmp(str, *(pc + i)) == 0){
break;
}
}
if(i < 5){
printf("报告主人发现目标:%d\n", i + 1);
}else{
printf("很抱歉没有找到~\n");
}
return 0;
}
定义二维字符数组时必须指定列长度,可能会浪费单元
指针数组并不存放字符串,仅仅用数组元素指向各个字符串
char ccolor[][7] = {"red","blue","yellow","green","black"};
char *pcolor[] = {"red","blue","yellow","green","black"};