《C++避坑神器·十一》地址和地址的地址赋值问题

文章详细解析了指针的调用和赋值,包括未初始化指针的错误、指向变量地址的情况以及地址的地址操作。通过实例展示了不同情况下指针对内存的影响,强调了正确使用内存管理的重要性。

文章目录

📢博客主页: 主页
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 梦回阑珊 原创,首发于 优快云,转载注明出处🙉
📢代码改变世界,你来改变代码!✨
在这里插入图片描述

概要

指针的调用和赋值的简单解析

技术细节

1、地址的调用和赋值

void f1(int* q)
{
	*q = 3;
}

int main(void)
{
	int i = 2;
	int* p;
	f1(p);
	printf("%d\n", *p);

	getchar();

	return 0;
}

显示结果错误,p没有初始化,随意的指向了内存的一个空间,又把这个地址给了q,及p,q指向了一个相同的内存空间,*q修改了这个内存空间的内容是错误的,不确定的一个内存空间的内容是无法读写的。

void f1(int* q)
{
	q = (int*)malloc(4);
	*q = 3;
}

int main(void)
{
	int i = 2;
	int* p = &i;
	f1(p);
	printf("%d\n", *p);

	getchar();

	return 0;
}

输出答案是2不是3,首先p指向i的地址,则p == 2,把p地址赋给q,则p,q共同指向i地址,这时若q = 3,则i的值会变。但在函数里却给q分配了一个新的内存空间,这时q指向这个动态内存空间,跟p没关系,p依然指向i地址,这时q=3不会影响i的值,所以p依然为2

2、地址的地址调用和赋值

void f1(int** q)
{
	*q = (int*)malloc(4);
	**q = 3;
}

int main(void)
{
	int i = 2;
	int* p = &i;
	f1(&p);
	printf("%d\n", *p);
	free(p);

	getchar();

	return 0;
}

答案为3不是2,首先把i地址赋给p,这时p指向i地址,p==2。然后把p地址的地址赋给q,这时q指向p地址的地址,q便是p地址,修改q的值便是修改p地址,这时若给q申请一个内存空间,那么q和p都指向这个内存空间,p不在指向i地址,这时给**q赋值,就是把q和p共同指向的内容空间放入值,那么*p就是这个值,用完要释放这个内存空间。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦回阑珊

一毛不嫌多,一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值