gpt4 book ai didi

scope - 局部 C 指针变量

转载 作者:行者123 更新时间:2023-12-02 17:48:02 26 4
gpt4 key购买 nike

假设我定义了以下代码:

int *func()
{
int *p=(int *)malloc(sizeof(int)); // memory is allocated from heap
// which can be accessed anytime.

return p; // but we created p which has a local scope and vanishes as
//soon as function exits.
}

那这个东西是怎么工作的呢? p 是一个局部变量(一个指向动态内存)。我的意思是 HEAP 中的内存本身肯定会继续存在,但指针变量具有局部作用域。我怎么能得到这个指针?

最佳答案

p 只是一个指向您已分配的内存块的指针。

分配 block 的生命周期超出了函数的末尾。

确实,实际的指针 会在返回时超出范围,但在此之前您已经将它的副本返回给调用者。

And, as an aside, you probably meant int* (in both cases) rather than *int and (*int). In any event, you don't want to explicitly cast the return value from malloc in C - it can hide subtle errors. C is perfectly capable of converting the void * returned by malloc into any suitable pointer type.

最好写成这样:

int *func (void) {
int *p = malloc (sizeof (int));
return p;
}

您还会注意到在函数中使用 void 来明确声明函数不接受任何参数。这比只使用略有不同的 ()(参数数量不确定)要好。

关于scope - 局部 C 指针变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12138386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com