关于指针的一些问题

Last updated on 9 months ago

看到一个改错题(很常见的一道题),一个关于申请内存的函数,即传入一个指针 p,然后分配内存,首地址保存到p,然后返回,由于malloc 是分配到栈的,即使函数消亡了,内存也不会回收,逻辑上没毛病,但实际上这个传入的参数是有问题的,刚好借这个题目复习下指针的一些操作

1
2
3
4
5
6
7
8
9
10
11
12
13
void * memory(int num,void *p){

p = malloc(sizeof(int) * num);
return p;
}
int main(){
void *p = nullptr;
memory(1024,p);
{
//申请成功后,操作p指向的内存

}
}
  1. 错在哪?

    知识回顾:https://blog.csdn.net/rouse2617/article/details/106846613 以前在csdn 有发过一篇关于指针通俗理解可以先看下

    memory 传入参数p,只是单纯的复制了p所指向的值而已,main里面的 p 和 函数memory里面的p 并不是同一个,通过代码可以验证,这两个的地址都不相同

    image-20221211011313002

  2. 怎么改正,改正的方法有那些?

    方法1 : 传入一个指针的地址,通过修改指针地址所在的值,即可达到目标,听起来有点绕,其实这个就是多重指针的用途! 这里暂时先不讨论image-20221211012445318

    方法2: 使用指针引用, 引用我们都知道,通俗的说就是一个值的别名,传入一个指针引用,相当于操作不本体一样,这种方式也比较便捷,更容易理解;指针引用

​ 具体的细节后面再更新