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”。但是,两个结果都是正号。
在函数中使用指针访问二维数组有什么区别吗?
谢谢。
答案 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个最后一行的含义相同。