Почему я не могу передать и отредактировать этот массив в функции? - PullRequest
0 голосов
/ 25 мая 2019

На мой предыдущий вопрос был дан ответ, но у меня есть другой в том же духе. Почему код не работает, когда я пытаюсь использовать многомерный массив?

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 ]

1 голос
/ 25 мая 2019

Вам нужно использовать звездочки для параметра во время объявления и определения. Для создания массива [0] = 4 вам нужно только присвоить 4 массиву [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 голос
/ 25 мая 2019

enter code here void change (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;
}

не помещайте '&' в массив. это указатель. поэтому вы должны изменить свою функцию «изменить (int ...), чтобы изменить (int *)»

и для изменения массива [0] вам не нужно помещать * в массив. это массив! или использовать *. тогда вы должны добавить n-й номер элемента.

0 голосов
/ 25 мая 2019

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

Для многомерного измерения Вы должны передать размер столбца.
Я сделал 2 образца как 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...