C:使用指针访问函数中的二维数组

时间:2018-03-25 17:08:54

标签: c function pointers multidimensional-array

int main() {

char test [2][4]= {"BbBa","CBAD"} ; /*two dimensional array */
char ch = 'A'; /* going to match this character */
int i=0;

int functionA (char test[]){
    char (*temp)[4] = test; /* if match to ch will print Yes */
    if (temp[2] == ch){
        printf("Yes");
    }
    else{
        printf("No.");
    }
}

for (i=0;i<2;i++){
functionA(test[i]);
}

getchar();
return 0;
}

我想比较BbBa和CBAD的第三个元素。那么结果应该是BbBa是“否”并且CBAD是“是”,因为BbBa的第三个元素是“B”而CBAD是“A”。但是,两个结果都是正号。

在函数中使用指针访问二维数组有什么区别吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

char (*temp)[4] = test; /* if match to ch will print Yes */

你的上下文中的这一行没什么意义 - 你总是可以编写这样的函数,而不会太复杂(你有不一致的代码风格。请注意我更改了参数名称,以避免与全局测试混淆)

int functionA (char toTest[], char ch){
    if (toTest[2] == ch){
        printf("Yes");
    } else{
        printf("No.");
    }
}

我还会传递char参数以使函数更灵活。这样,您的循环将如下所示:

for (i=0;i<2;i++) {
    functionA(test[i], 'A');
}

您可以展开它(少量迭代,浪费周期):

functionA(test[0], 'A');
functionA(test[1], 'A');

在展开它之后,代码看起来像这样:

if (test[0][2] == ch){
    printf("Yes");
} else {
    printf("No.");
}

if (test[1][2] == ch){
    printf("Yes");
} else {
    printf("No.");
}

要解决原始问题,“使用指针访问函数中的二维数组有什么不同吗?”,因为访问数组是基于使用指针。例如:

int a[5] = {0,0,0,0,0};
a[5] = 23;
5[a] = 23;
*(a+5) = 23;

3个最后一行的含义相同。