我正在尝试从四个输入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);
如果我偏离此代码,我似乎最终会导致编译器无法构建甚至更多警告。
答案 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]
,但是混淆是因为它们在内存中看起来不一样。