Индексируются ли массивы с нулевым индексом, когда они передаются через функции в качестве аргументов? C программирование - PullRequest
0 голосов
/ 01 августа 2020

Проиндексированы ли нулевые массивы, когда они передаются через функцию в качестве аргумента? Или C просто скопировал память массива A в два разных массива?

Мне никогда не нужно «сбрасывать» исходную позицию массива, когда я передаю тот же массив через другую функцию?

static const int A[3] = {1, 5, 8};

void fun(const int B[]){
    printf("val = %d\n", *B);
    B++;
    printf("val = %d\n", *B);
}

int main() {

    fun(A);
    fun(A);

    return 0;
}

Вывод:

val = 1
val = 5
val = 1
val = 5

Например, когда я не использую const, я вижу, что они используют одну и ту же память, но это только тогда, когда я не использую const .

static int A[3] = {1, 5, 8};

void fun(int B[]){
    printf("val = %d\n", *B);
    *B = 10;
    printf("val = %d\n", *B);
}

int main() {

    fun(A);
    fun(A);

    return 0;
}

Вывод:

val = 1
val = 10
val = 10
val = 10

1 Ответ

0 голосов
/ 01 августа 2020

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

int A[] = {1, 5, 8, 10};

void fun(const int **B){
    printf("val = %d\n", **B);
    (*B)++;
    printf("val = %d\n", **B);
}

int main() 
{
    int *C = A;
    fun(&C);
    fun(&C);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...