3

我正在尝试从四个输入 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);

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

4

2 回答 2

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;
}
于 2013-07-11T19:55:33.430 回答
2

这是错误的:

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

尝试这个:

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

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

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

当您传递一个数组时,您必须始终说明除第一个轴以外的所有轴的尺寸,否则编译器将不知道要跳过多少条目才能到达下一行。在这种情况下,我给出的示例为int [4][4],但int [][4]如果您希望提供未知数量的数据行,它也可以是 。

a[x]由于 C 使用相同的符号来访问int **和,因此出现了混淆int[n][m],但它们在内存中看起来并不相同。

于 2013-07-12T13:46:41.440 回答