C中的逻辑数组

时间:2013-07-11 19:51:04

标签: c

我正在尝试从四个输入a,b,c和d测试逻辑功能。

每个输入都是0或1。

我一直试图通过数组来实现这一目标。

如果logicXY数组中的列与combLogic数组的列匹配,我想传回1。

int comb(int** combLogic, int** logicXY){
    int x, y, logicOut;
    for ( x = 0; x < 4; x++ ){
        if (logicXY[0][x] == combLogic[x]){
                logicOut = 1;
                }
    }
    return logicOut;
}


int main void(){
    int** combLogic[4] = {a,b,c,d};  /*logic input*/
    int** logic[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1}}; /*return 1 if any of these combinations match the logic input*/
    int comb(combLogic, logicXY); /*send to function*/
}

我知道函数不完整,但我认为我没有正确传递数组。我已阅读了许多教程,但我似乎无法掌握这一理论。

修改的 我向前迈了几步,但仍然无法正常工作。这就是我现在所拥有的。

.h

中的函数声明
int comb(logicInput,logicTest);

.c

中的功能
/* Function - Combination */
int comb(int** logicInput, int** logicTest){
int x, y, logicOut;
    for ( x = 0; x < 4; x++ ){
        if (logicTest[0][x] == logicInput[x]){
                logicOut = 1;
                }
    }
    return logicOut;
}

main.c的一部分循环

int output = 0;
int logicInput[4] = {0,1,1,1};
int logicTest[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1,1,1}};
int comb(logicInput,logicTest);
output = comb;

代码跨越int comb(logicInput,LogicTest)并且从不执​​行该功能。 如果我从行中取出int然后它执行函数,返回值,但是当值写入输出时,它与函数返回的值完全不同。

修改

我对代码进行了一些更改,因此它确实起作用,并且只有一个来自编译器的警告,用于.h中的函数声明,我似乎无法修复。

warning: parameter names (without types) in function declaration [enabled by default]

.h

中的函数声明
int comb(logicInput,logicTest);

.c

中的功能
int comb(int** logicInput, int** logicTest){ /*Points to the arrarys in the main   program*/
int x, i, logicOut;
    for(i = 0; i < 4; i++){ /*test each column*/
     for ( x = 0; x < 4; x++ ){ /*test each row*/
      if (logicTest[i][x] == logicInput[i][x]){
            logicOut = 1;
            break;
            }
}
   if(logicOut == 1)break; /*Break when logicOut == 1 the first time it happens*/
}
return logicOut;
}

在main.c中循环

int output;
int logicInputC1[4] = {0,1,0,1};
int logicTestC1[4][4] = {{1,0,0,1}, {1,0,1,1}, {0,1,0,0}, {0,1,0,1}};
output = comb(logicInputC1,logicTestC1);

如果我偏离此代码,我似乎最终会导致编译器无法构建甚至更多警告。

2 个答案:

答案 0 :(得分:3)

int * comblogic[4] = {a, b, c, d} //where a, b, c, and d, are arrays of size 4; aka int     a[4];
int logicArray[4][4] = values; 

在你的循环中:

int comb(int** combLogic, int** logicXY){
    int x, y, logicOut;
    for(int i = 0; i < 4; i++){
     for ( x = 0; x < 4; x++ ){
      if (logicXY[i][x] == combLogic[i][x]){
            logicOut = 1;
            break;
            }
}
   if(logicOut == 1)break; //incase you want to break when logicOut == 1 the first time it happens
}
return logicOut;
}

答案 1 :(得分:2)

这是错误的:

int comb(int** logicInput, int** logicTest)

试试这个:

int comb(int logicInput[4], int logicTest[4][4])

不同之处在于int **需要一个指向指针(或指针数组)的指针,但是当你像你一样定义一个数组时,根本就没有指针,所以它不起作用。

好的,从技术上讲,当您将数组传递给函数时,它会获取该数组的地址并通过引用传递它。这意味着你有一个指向数组的指针,但该数组中仍然没有指针。

当你传递一个数组时,你必须总是说出除了第一个轴之外的所有维度,否则编译器将不知道要跳到多少个条目以进入下一行。在这种情况下,我将示例设为int [4][4],但如果您希望提供未知数量的数据行,那么它也可以int [][4]

由于C使用相同的a[x]表示法来访问int **int[n][m],但是混淆是因为它们在内存中看起来不一样。