我有几个静态全局数组,我需要在某些条件下有条件地将我的函数中的数组设置为等于其中一个数组。
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;
}
}
我得到error: incompatible types in assignment
,我唯一可以猜到的是static关键字是干扰的,因为据我所知,赋值的两边都是int []。
提前致谢!
答案 0 :(得分:1)
一种方法是:
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;
}
}
答案 1 :(得分:0)
一种简单的方法是使用指向静态全局数组的指针。数组的名称是一个指针。
然后,您的函数int myFunc(int 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;
}
输出:
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
您可以注意到arr1
和arr2
的尺寸可能不同。