Tôi muốn foo() không sửa đổi mảng. Vì vậy, tôi tuyên bố mảng trong foo()
như const
const array [] [] làm tham số chính thức trong C - mismatch
Nếu tôi biên dịch mã này, trình biên dịch được phàn nàn:
#include <stdio.h>
void foo(const int arr[5][5])
{
int i,j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
printf("%d\n", arr[i][j]);
}
}
}
int main()
{
int val = 0;
int i,j;
int arr[5][5];
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
arr[i][j] = val++;
}
}
foo(arr);
}
Cảnh báo là:
tham sốallocate.c: In function 'main':
allocate.c:26:9: warning: passing argument 1 of 'foo' from incompatible pointer type
foo(arr);
^
allocate.c:3:6: note: expected 'const int (*)[5]' but argument is of type 'int (*)[5]'
void foo(const int arr[5][5])
^
Còn cách nào khác tôi có thể tuyên bố chính thức như liên tục?
Bạn không muốn 'foo()' có thể ** sửa đổi mảng? Bởi vì foo không sửa đổi mảng, nó chỉ đọc nó. – moffeltje
http://stackoverflow.com/a/28062262/1606345 –
có thể trùng lặp của [Truyền mảng hai chiều đến hàm của tham số không đổi] (http://stackoverflow.com/questions/28062095/pass-a-two- chiều-array-to-a-function-of-hằng số-tham số) – 2501