为什么不能将数组传递并编辑为函数?

时间:2019-05-25 17:09:06

标签: c

我的上一个问题得到了回答,但我有另一个问题。为什么在尝试使用多维数组时代码不起作用?

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;
}

3 个答案:

答案 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;
}

对于多维,应传递列的大小。
我制作了两个样本,分别为changechange2
我认为您可以很好地理解change
但是,在change2的情况下,arrayarray[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;
}
相关问题