gpt4 book ai didi

c - 为什么分配带有静态关键字的数组和不分配指针的数组有区别?

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

下面的代码可以正常工作并给出输出 4:

int main()
{

int *res = valout();
printf("%d", res[0]);
}

int *valout()
{
static int arr[] = {4, 5, 6};
return arr;
}

以下代码返回段错误:

int main()
{

int *res = valout();
printf("%d", res[0]);
}

int *valout()
{
int arr[] = {4, 5, 6};
return arr;
}

为什么我们在案例 2 中得到错误,而不是在案例 1 中? static 关键字在这里起什么作用?请详细说明这个问题。

最佳答案

因为:

static int arr[] = {4, 5, 6};

创建一个 static 数组(显然),定义为从创建之时起就存在的变量直到程序退出。

另一方面:

int arr[] = {4, 5, 6};

创建一个仅存在于定义它的函数(或 block )的有限范围内的变量。它不再是函数退出时。

在这两种情况下,return arr 返回该数组的第一个元素的地址。不幸的是,对于非static 变体,没有正确的方法使用 该地址,因为它所引用的底层对象已不复存在。因此,它会提示它。

static版本,一直存在到程序退出,可以在函数退出后使用。

关于c - 为什么分配带有静态关键字的数组和不分配指针的数组有区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913536/

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