gpt4 book ai didi

c - 数组在 C 中的函数调用之间保存数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:12 24 4
gpt4 key购买 nike

为什么在我没有使用static的情况下为第二次调用保留数据?

这是代码、输出以及我所期望的输出。

#include <stdio.h>

void fun(int len)
{
int arr[10];
int i;

for (i = 0; i < len; i++)
arr[i] = (i+1) * 10;

for (i = 0; i < 10; i++)
printf("%d ", arr[i]);

printf("\n");
}

int main(void) {
fun(10);
fun(4);

return 0;
}

输出:

10 20 30 40 50 60 70 80 90 100 
10 20 30 40 50 60 70 80 90 100

预期输出:

10 20 30 40 50 60 70 80 90 100 
10 20 30 40 0 0 0 0 0 0

最佳答案

int arr[10]; 在堆栈上声明了一个包含 10 个 int 元素的数组。它的元素是未初始化的。如果你试图在没有初始化的情况下访问它们,就像 fun(4) 的情况一样,你可能会看到垃圾值,你可能碰巧看到旧的内存内容(就像你在这里所做的那样),或者你可能如果内存页属于另一个程序,则程序会因段错误而崩溃。您甚至可以获得预期的输出!事实上,任何事情都有可能发生,因为规范未定义行为。

为了满足您的期望,以您选择的任何方式初始化数组,例如以下方式之一:

int arr[10] = {};
int arr[10] = {0};
int arr[10];
memset(arr, 0, sizeof(int) * 10);
int arr[10];

for (int i = 0; i < 10; i++) {
arr[i] = 0;
}

等等

关于c - 数组在 C 中的函数调用之间保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53918722/

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