指针进阶

二维数组的指针形式

&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"};

猜你喜欢

转载自blog.csdn.net/qq_41895253/article/details/82466540