C语言中的多级指针

#include <stdio.h>

int main(void)
{
	int a[] = { 1,2,3 };
	int b[] = { 4,5,6 };
	int c[] = { 7,8,9 };
	//指针数组是一个特殊的二维数组模型
    //指针数组对应于二级指针
	int* arr[] = { a,b,c };

	//指针数组和二级指针建立关系
	int** p = arr;

	//printf("%d\n", **p); //(打印数字1);**p后面没写东西相当于p[0][0]
	//二级指针加偏移量相当于跳过了一个一维数组的大小
	//printf("%d\",**(p + 1));
	//一级指针加偏移量相当于跳过了一个元素
	//printf("%d\n", *(*p + 1));//打印数字2
	//printf("%d\n", *(*(p + 1) + 1));//打印数字5

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{    
			//以下三条printf语句的功能都是将a[],b[],c[]中的值打印出来
			printf("%d ", p[i][j]);
			//printf("%d ", *(p[i] + j));
			//printf("%d ", *(*(p + i) + j));
		}
		puts("");
	}
	return 0;
}

以上代码中的部分语句被我注释掉了,但我已经把它们的功能说得很清楚了,读者可自行调试。

 

#include <stdio.h>

int main(void)
{
	int a = 10;
	int* p = &a;
	int** pp = &p; //pp二级指针变量的值
	               //*pp一级指针的值
	               //**pp变量的值
	int b = 20;
	**pp = 100;
	//*pp = 100;  //野指针(error)
	printf("%d\n", *p);
	printf("%d\n", a);

	//三级指针:
	/*
	     int*** ppp = &pp;
	     *ppp == pp == &p;
	     **ppp == *pp == p == &a;
	     ***ppp == **pp == *p == a;	
	*/
	return 0;
}

上面的第二个程序的注释也很清晰,这里不再解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值