这里是 C 的新手,如果我能得到一些指示,我将不胜感激。
我试图在 if 语句中初始化一个数组,然后在外部打印数组的值 - 但我知道在 if block 结束后范围将丢失。我试过用指针创建数组。我在 if 语句中这样做的原因是因为数组的大小取决于运行时计算的值。
例如:
void createArray() {
int userInput;
printf("%s\n", "Please enter a value:");
scanf("%d\n", userInput);
if (userInput > 10) {
int array[userInput];
}
int i;
for (i = 0; i < userInput; i++) {
array[i] = i;
}
}
int i;
for (i = 0; i < sizeof(array)/sizeof(array[0]); i++) {
printf("%d\n", array[i]);
}
然而,因为数组是在方法内部声明的,所以当涉及到要打印的最终 for 循环时,我显然失去了它的范围——因此发生了错误。我试过创建一个指针变量 int *array
作为全局变量,在 if 语句中,只保留 array = int[10] 但显然这行不通。
这不是我的确切代码,我重新创建了一个显示我的错误的最小示例,因此此处的某些语法可能是错误的 - 对此深表歉意。
如有任何帮助,我们将不胜感激。
最佳答案
您在代码中必须考虑的一个问题是如果 userInput 小于或等于 10 会发生什么情况?您迭代未声明的数组的 userInput 元素。
处理这个问题的一个简单方法是在函数的开头创建一个大数组,然后仅使用它的第一个 userInput 元素。这种方法显然有其局限性(例如,userInput 不能大于数组的大小,您应该确保它不会大于,否则可能会发生不好的事情),但是很简单。
另一种方法涉及使用动态内存分配。这是通过使用 malloc
函数完成的:
int *array = malloc(100 * sizeof(int));
上面的代码为 100 个整数分配了内存,基本上创建了一个包含 100 个元素的数组。然后,您可以像往常一样使用该数组。但是,确保在完成后释放它:
free(array);
请注意,使用此方法需要先声明指针:
int *array;
if (userInput > 10) {
array = malloc(userInput * sizeof(int));
}
您可以在下面找到一个小型概念验证程序。请注意,可以从 alloc 函数返回指针值而不是全局变量。
#include <stdio.h>
#include <stdlib.h>
int *arr;
void alloc() {
arr = malloc(10 * sizeof(int));
}
void assign() {
for (int i = 0; i < 10; i++)
arr[i] = i + i;
}
void print() {
for (int i = 0; i < 10; i++)
printf("%d\n", arr[i]);
}
int main(int argc, char *argv[])
{
alloc();
assign();
print();
free(arr);
return 0;
}
关于c - 在 if 语句中初始化一个 int 数组并在外部使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975084/