C语言基础之多级指针讲解

多级指针的定义

  • 把一个指向指针变量的指针变量叫做多级指针变量
  • 对于指向处理数据的指针变量称为一级指针变量,简称一级指针
  • 而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针
  • 二级指针的说明形式如下:
    • <存储类型><数据类型>**<指针名>;

指针的运算

多级指针的运算
  • 指针变量+1,是向地址大的方向移动一个目标数据。类似的道理,多级指针的运算也是以其目标变量为单位进行偏移。
  • 比如:in **p;p+1;移动一个int *变量所占的内存空间。再比如int ***p,p+1移动一个int **所占的内存空间。

综合例程:

#include<stdio.h>
int main (void)
{
	int m = 10;
	int *p;
	int ** q;
	p = &m;
	q = &p;
	printf("%p %p %p %p %p\n",&m,p,q,&p,&q);
	/*获取int型m的地址,指针变量p所指向的地址,指针变量q所指向的地址,
	指针变量p本身的地址以及指针变脸q本身的地址。*/
	printf("%d %d %d\n",m,*p,**q);
	/*以三种形式打印变量m的值*/
	printf("%d %d %d\n",m+1,*p+1,**q+1);
	/*以三种方式打印变量m+1后的值*/
	return 0;
}

运行结果:

0x7ffd36fee364 0x7ffd36fee364 0x7ffd36fee368 0x7ffd36fee368 0x7ffd36fee370
10 10 10
11 11 11

多级指针与指针数组

  • 指针数组也可以用另外一个指针来处理。
  • 例如:有一个一维字符指针数组parr[5];
  • char *parr[5] = {“Beijing city”,······“London city”};

例:数字数组指针与多级指针的应用

#include<stdio.h>
int main (void)
{
	int arr[] ={2,44,566,10};
	int *p[4];//定义一个指针数组
	int ** q = 0; //定义一个二级指针变量
	p[0] = &arr[0];
	p[1] = &arr[3];
	q = p;//q = &arr[0]
	//使用数组指针,二级指针打印数组数字2和数字10的地址
	printf("%p %p %p %p\n",&arr[0],p[0],&p[0],q);
	printf("%p %p %p %p\n",&arr[3],p[1],&p[1],q+1);
	//使用数组指针,二级指针打印数组的第一个和第四个元素的内容
	printf("%d %d %d\n",arr[0],*p[0],**q);
	printf("%d %d %d\n",arr[3],*p[1],**(q+1));

	return 0;
}

运行结果:

0x7ffc6dede590 0x7ffc6dede590 0x7ffc6dede5a0 0x7ffc6dede5a0
0x7ffc6dede59c 0x7ffc6dede59c 0x7ffc6dede5a8 0x7ffc6dede5a8
2 2 2
10 10 10

例:字符指针数字与多级指针的应用

#include<stdio.h>
int main (void)
{
	char *str[] ={"How","are","you","!"};
	char **p;
	int i = 0,n;
	n = sizeof(str)/sizeof(char *);//计算字符指针中元素的个数
	p = &str[0];//也可写成p = str;
	while(i<n)
	{	
		//循环打印字符指针的内容
		printf("%s ",str[i]);
		printf("%s ",*(p+i));
		i++;
		puts("");
	}
	
	return 0;
}

运行结果:

How How 
are are 
you you 
! ! 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值