C 是否将本地数组的内容分配给全局静态数组的内容?

C 是否将本地数组的内容分配给全局静态数组的内容?,c,C,我有两个静态全局数组,我需要在函数中有条件地设置一个数组,使其在某些条件下等于其中一个数组 static int arr1[] = {1,2,3,4}; static int arr2[] = {4,3,2,1}; int myFunc(int x) { int myArr[4]; if (x > 4) { myArr = arr1; } else if (x <= 4) { myArr = arr2; } }

我有两个静态全局数组,我需要在函数中有条件地设置一个数组,使其在某些条件下等于其中一个数组

static int arr1[] = {1,2,3,4};
static int arr2[] = {4,3,2,1};

int myFunc(int x) {
    int myArr[4];
    if (x > 4) {
        myArr = arr1;
    }
    else if (x <= 4) {
        myArr = arr2;
    }
}
我得到了一个错误:赋值中的类型不兼容,我唯一能猜到的是static关键字有干扰,因为据我所知,赋值的两边都是int[]

提前谢谢

一种方法是:

static int arr1[] = {1,2,3,4};
static int arr2[] = {4,3,2,1};

int myFunc(int x) {
    int myArr[4];
    if (x > 4) {
        memcpy(myArr, arr1, sizeof arr1);
    }
    else if (x <= 4) {
        memcpy(myArr, arr2, sizeof arr2);
    }
}
但是,如果不打算修改副本,您可能只需要一个指向全局数组的指针,也许这就是您的情况,因此您可以只存储一个指针:

int myFunc(int x) {
    const int* myArr;
    if (x > 4) {
        myArr = arr1;
    }
    else if (x <= 4) {
        myArr = arr2;
    }
}

一种简单的方法是使用指向静态全局数组的指针。数组的名称是指针。 然后你的函数int myFuncint x看起来几乎和你原来的一样

这是一个示例代码:

#include<stdio.h>

static int arr1[] = {1,2,3,4,5,6};
static int arr2[] = {4,3,2,1};

int myFunc(int x) {
    int *myArr;
    size_t i;
    size_t myArrSize;

    if (x > 4) {

        myArr = arr1;
        myArrSize = sizeof(arr1)/sizeof(int);
    }
    else if (x <= 4) {

        myArr = arr2;
        myArrSize = sizeof(arr2)/sizeof(int);        
    }

    for(i=0; i< myArrSize; i++)
        printf("array[%d]=%d\n", i , myArr[i]);

     printf("\n");
}

int main() {

   myFunc(6);
   myFunc(4);

   return 0;
}

正如您所注意到的,arr1和arr2的大小可能不同

要么使int*myArr;或者使用。你不返回任何东西,这可能也是一个相关的问题:你不能分配数组-这是C的愚蠢规则之一。C中的裸数组是不可复制的。关键字static与问题无关。您可以使用结构技巧作为解决方法。实际上,我第一次使用指针解决方案,但由于另一个问题而出现SEGFULT。我会接受你的回答,因为如果我的问题是我所认为的,它会解决我的问题。
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5
array[5]=6

array[0]=4
array[1]=3
array[2]=2
array[3]=1