美文网首页
跨函数使用内存

跨函数使用内存

作者: Vergil_wj | 来源:发表于2021-07-24 08:32 被阅读0次

下程序中,能够通过调用函数 fun,是 main 函数中的指针变量 p 指向一个合法的整型单元(变量)的是();

A:

main()
{
    int *p;
    fun(p);
    ...
}

int fun(int *p)
{
    int s;
    p = &s;
}

main() 函数中声明了一个 指针变量 int *p,p 是指向整型类型的地址的,所以想要修改 p 的值,就是修改 p 指向的地址。fun(p) 应修改为 fun(&p)。

B:

main()
{
    int *p;
    fun(&p);
    ...
}

int fun(int **q)
{
    int s;
    *q = &s;
}

第一步,取 p 地址,fun(&p);
第二步,将 s 的地址发送给 *q,*q 即 p,所以 p 指向了s 的地址。
第三步,函数 fun(&p) 执行完毕后,局部变量 int s 释放,s 没有了,p 并没有指向合法的变量。

C:

main()
{
    int *p;
    fun(&p);
    ...
}

int fun(int **q)
{
    *q = (int *) malloc(4);
}

fun() 函数中 使用 malloc() 函数动态分配内存,需要我们手动释放,所以 fun() 函数执行完之后,p 指向 4 个字节依然存在,p 指向的是一个合法的变量。

D:

main()
{
    int *p;
    fun(p);
    ...
}

int fun(int *q)
{
    *q = (int *) malloc(4);
}

fun(p) 没有使用取地址符,错误。

综上正确答案选 C。

小结:

A() 函数想要使用 B() 函数中的内存,B() 函数中的内存需要使用动态分配,即需要我们手动释放的内存。如果使用局部变量即静态分配的,在函数执行完成之后就会自动释放了,无法使用到其内存。

相关文章

网友评论

      本文标题:跨函数使用内存

      本文链接:https://www.haomeiwen.com/subject/cqysultx.html