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

概要
指针的调用和赋值的简单解析
技术细节
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就是这个值,用完要释放这个内存空间。

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

被折叠的 条评论
为什么被折叠?



