c - 在 if 语句中初始化一个 int 数组并在外部使用

标签 c arrays

这里是 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/

相关文章:

c - linux ARP recvfrom信息

c++ - 对于英语单词来说,什么是好的哈希函数?

php - 将数组插入关系数据库仅适用于数据库中已存在的数组中的数据

c - 为什么我的 for 循环增量变化很大?

c++ - "read_format"结构的 "perf_event_attr"属性的选项到底是什么?

c - 如何获取特定的数组元素

javascript - 警告 : Encountered two children with the same key, `[object Object]`

Java对象数组空元素内存

c - UNIX C 函数中的命名约定(_t 和 _st)

javascript - 使用参数数组调用函数