C语言系列(15)——指针(03)

一、定义

指针数组即,存放指针的数组。
语法:

数据类型 *p[元素个数];

如:定义存放10个整数指针的数组

int *p[10];

其实就是一个数组,只不过存放的元素是指针变量

二、初始化、赋值和元素操作
int a, b, c, d, e;
//p指针数组,存放了5个地址
int *p[5] = { &a, &b, &c, &d, &e };//存放a,b,c,d,e的地址
*(*(p + 0)) = 2;//等价 p[0][0] = 2;
printf("%d\n", a);//打印:2
//p[0][1] = 3;//访问不合法
//字符串类型指针数组:
char n1[10] = "liLei";
char n2[10] = "Binson";
char n3[10] = "xiaowei";
char* name[3] = { n1, n2, n3 };//存放n1,n2,n3的地址
puts(name[0]);//Lilei
puts(*name);//lilei 等价于*(name+0)
putchar(**name);//l 等价*(*(name+0)+0),等价于name[0][0]
**name = 'L';
puts(*name);//Lilei
//初始化为常量字符串
const char* constName[5] = { "Lily", "Lucy", "Jame", "Jim", "jeff" };
puts(*(constName+0));
*(constName+0) = "lily";//改变第一个
puts(*constName);
//*((*constName + 0) + 0) = 'L';//不能修改,因为是常量字符串
//初始化为NULL,5个指针都指向NULL
char* str[5] = { NULL };
三、指针的指针(多级指针)

语法:

数据类型 **p;

例:

int a = 0;
int *p = &a;
int **pp = &p;
int ***ppp = &pp;
printf("%p, %p, %p\n", p, pp, ppp);

图示:
在这里插入图片描述

char name[5][10] = { "张三疯", "张无忌", "张铁林", "张学友", "zhangsan" };
char(*p)[10] = name;
//char** pp = name;//error指数组的指针,数组的长度是确定的,所以不能直接用二级指针指向。
const char *name1[5] = { "张三疯", "张无忌", "张铁林", "张学友", "zhangsan" };
const char **pp = name1;//可以理解为一个 char* 类型的一级指针,指向了一个 一维数组(该一维数组元素是指针)。

练习:

如下用指针操作
1、矩阵置换
	1、2、3    	1、4、7
	4、5、6	 ->	2、5、8
	7、8、9    	3、6、9
	
2、输入10个人的英文姓名,按字母排序(字符串比较大小)输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值