我的上一个问题得到了回答,但我有另一个问题。为什么在尝试使用多维数组时代码不起作用?
void change(int *);
int main(void){
int array[1][2] = {2};
printf("%d", array[1][2]);
change(array);
printf("%d", array[1][2]);
}
void change(int *array){
array[1][2] = 4;
}
答案 0 :(得分:1)
在声明和定义时,您需要在参数上使用星号。 为了使array [0] = 4,您只需要将4分配给array [0],而不带星号。因此您的代码应为:
void change(int *);
int main(void){
int array[1] = {2};
printf("%d", array[0]);
change(array);
printf("%d", array[0]);
}
void change(int *array){
array[0] = 4;
}
答案 1 :(得分:1)
enter code here
无效更改(int *);
int main(void){
int array[1] = {2};
printf("%d\n", array[0]);
change(array);
printf("%d\n", array[0]);
}
void change(int* array)
{
array[0] = 4;
*(array + 0) = 4;
}
不要将“&”放入数组中。它是指针。因此您必须将函数“ change(int ...)更改为change(int *)”
并更改array [0],您无需在数组上加*。这是一个数组!或使用*。那么您必须添加第n个元素编号。
答案 2 :(得分:0)
C语言使用pass by value
。
因此,您必须接收数组的地址作为参数。
void change(int *, int);
int main(void) {
int array[3] = { 1, 2, 3 };
printf("%d", array[1]);
change(array, 1);
printf("%d", array[1]);
}
void change(int *array, int index) {
*(array+index) = 4;
}
对于多维,应传递列的大小。
我制作了两个样本,分别为change
和change2
。
我认为您可以很好地理解change
。
但是,在change2
的情况下,array
在array[2][3]
中有一个存储器的头地址,并且它的6
整数是2x3
。因此,您可以进行计算。
void change(int array[2][3], int, int, int);
void change2(int *, int, int, int, int);
int main(void) {
int array[2][3] = { { 1, 2, 3 }, {4, 5, 6} };
printf("%d", array[1][1]);
change(array, 1, 1, 10);
printf("%d", array[1][1]);
change2((int *)array, 3, 1, 1, 20);
printf("%d", array[1][1]);
}
void change(int array[2][3], int row, int col, int value) {
array[row][col] = value;
}
void change2(int *array, int size_col, int row, int col, int value) {
*(array + row*size_col + col) = value;
}