почему ** pointer2 может изменить переменную a? - PullRequest
0 голосов
/ 19 марта 2019
# include <stdio.h>
int main(){
    int *** pointer3;
    int **  pointer2;
    int *   pointer1;
    int a = 10;
    pointer1 = &a;
    pointer2 = &a;
    pointer3 = &a;
    *pointer1 = 100;
    printf("%d\n",a);

    *pointer2 = 200;
    printf("%d\n",a);

    *pointer3 = 300;
    printf("%d\n",a);

    pointer3 = &pointer2;
    pointer2 = &pointer1;

    ***pointer3 = 400;
    printf("%d\n",a);

}

этот код смутил меня. мы знаем, что pointer2 - это указатель на указатель, но его значением является адрес переменной 'a'. почему * pointer2 может изменить значение a. тот же вопрос о pointer3? пожалуйста, помогите мне, большое спасибо.

1 Ответ

4 голосов
/ 19 марта 2019

Этот код не является допустимым C, поэтому обсуждение любых форм его результатов является лишь догадкой.Если ваш компилятор создал двоичный файл из этого кода, ваш компилятор сломан и должен быть заменен.

В частности, это недопустимо C:

pointer2 = &a;
pointer3 = &a;

int** не может бытьприсваивается int*, а также int***.

(ограничение ограничений правил простого присваивания)

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