C/C++ 之 多级指针

多级指针

多级指针还是指针,保存了上级指针的地址值
# include<stdio.h>
# include<malloc.h>
void xp(int **);
void main(void)
{
	int i=10;			//系统分配了四个字节保存了10;
	int * p=&i;			// 把i的内存地址保存给p
	int ** q=&p;		//把p的地址保存给了q
	int *** k=&q;		//把q的地址保存给了k
	printf("%d\n",***k);//输出结果就是10;

	//可以理解成老师提问学生:例如:*p取p内存的内容即i的地址值,老师大声问这是谁的地址啊,i站起来说是自己的。老师说是你的那就给你吧。所以*p=i了
	//再例如:*k取k内存中保存的值即q的地址值,老师问这是谁的地址啊,q说是自己的,所以*k=q了。
	//那么**k=*q=p了;***k=**q=*p=i;所以输出结果就是10;

	//现在要修改p指针,必须要取p的地址,&p的类型为int **;
	xp(&p);
	printf("%d\n",*p);
}
void xp(int ** d)
{
	//int m=20;
	//*d=&m;//这里就把p的值修改了,*p=&m;但是这个内存是在函数中定义的,当函数出栈的时候内存释放了,如果系统再次把这个内存分给其他的变量的时候就会出问题。
		  //所以这里要使用动态分配内存,因为动态分配是分配在堆内存当中的。函数出栈不受影响。
	*d=(int *)malloc(sizeof(int));//动态在堆内存中分配了一个4个字节的内存。malloc(int)这个函数只返回分配内存的第一个字节的地址值,需要强制转换成int *;
	**d=20;

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值