我对编程很陌生,所以如果这听起来是一个不好的问题,我感到很抱歉。
我的代码:
#include <stdio.h>
void Order(int *waiterList){
printf("Number is %d", *waiterList[0][1]);
}
int main(){
int waiterList[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Order(&waiterList);
return 0;
}
此代码给我这个错误:
pointer.c: In function 'Order':
pointer.c:5:39: error: subscripted value is neither array nor pointer nor vector
printf("Number is %d", *waiterList[0][1]);
pointer.c: In function '`enter code here`main':
pointer.c:13:8: warning: passing argument 1 of 'Order' from incompatible pointer type [-
Wincompatible-pointer-types]
Order(&waiterList);
pointer.c:3:6: note: expected 'int *' but argument is of type 'int (*)[3][3]'
void Order(int *waiterList){
对不起,我以前从未使用过数组,但是我们的最终项目要求我们使用数组,我发现很难理解我在Google上找到的文章...希望您能帮助一个学生,这也是我的第一次在这里发布是因为我有点绝望。
答案 0 :(得分:1)
实现此目标的简单方法是
#include <stdio.h>
void Order(int waiterList[3][3]){ // receive an array of type `int [3][3]`
printf("Number is %d", waiterList[0][1]);
}
int main(){
int waiterList[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Order(waiterList); // just pass the array name
return 0;
}
如果必须使用指针,请使用适当的类型:
#include <stdio.h>
void Order(int (*waiterList)[3][3]){ // pointer to an array of type `int[3][3]`
printf("Number is %d", (*waiterList)[0][1]);
}
int main(){
int waiterList[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Order(&waiterList); // pass the address of the array
return 0;
}
答案 1 :(得分:0)
将数组 decay 指向指向其第一个元素的指针,对于通用数组a
,它会衰减到&a[0]
。
对于类似waiterList
函数中的main
的数组,当它衰减到指向其第一个元素(&waiterList[0]
)的指针时,其类型将为数组”。更具体地说,对于waiterList
,类型变为int (*)[3]
。其中必须是Order
函数的参数类型:
void Order(int (*waiterList)[3]){
printf("Number is %d", waiterList[0][1]);
}
您称它为传递数组的变量,而无需任何指针或地址运算符:
Order(waiterList);