gpt4 book ai didi

c - 关于指针的简单问题以及如何在 C 中初始化数组

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

我有一个关于我编写的用于一次初始化一个数组的简单程序的问题,下面是几行代码:

#include <stdio.h>
int main(void)
{
int *ptr;
int index;
for (index = 0; index < 4; index++)
{
ptr[index]=index;
printf("%d\n", ptr[index]);
}
return 0;

}

一切都简单明了,但是当我运行该程序时,我会遇到段错误(核心转储)错误,据我所知,当您尝试在仅可读的内容上写入内容或超出允许的内存时,就会发生这种情况。 .对不起,这个问题可能很幼稚,但我在 SO 上找不到类似的问题。

最佳答案

您不能只使用 int *ptr 并将其视为数组。您需要实际创建一个数组并通过指定大小为其分配空间。您可以像第一个选项那样将其作为数组,或者在第二个选项中使用 malloc() 分配它。我建议第一个,因为它执行得更快,而且你的数组似乎是固定长度的。第二种选择适用于您直到运行时才知道数组大小的应用程序。

#include <stdio.h>
int main(void)
{
int ptr[4]; //you need to specify array size first
int index;
for (index = 0; index < 4; index++)
{
ptr[index]=index;
printf("%d\n", ptr[index]);
}
return 0;
}

如果你想在堆上分配它,你也可以使用 malloc(),但是一定要 free() 它,释放内存,或者在那里将是内存泄漏。

#include <stdio.h>
int main(void)
{
int *ptr = malloc(4*sizeof(int));
int index;
for (index = 0; index < 4; index++)
{
ptr[index]=index;
printf("%d\n", ptr[index]);
}
free(ptr);
return 0;
}

这应该可以解决您的问题

此外,您不需要 for 循环来初始化填充数组的值,以防您尝试这样做。你可以这样做:

int ptr[4] = {0, 1, 2, 3};

关于c - 关于指针的简单问题以及如何在 C 中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399936/

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