Я пытаюсь понять, как работают указатели.

Для следующего фрагмента кода:

void main () {
    int x = 1;
    int y = 2;
    int z = 3;
    
    int *p = &x;
    int *q = &y;
    int *r = &z;

    //print  with labels the values of x, y, z, p, q, r, *p, *q, *r
    printf("x is: %d\n%y is: %d\nz is: %d\n\n",x,y,z);    
    printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r); 
    printf("*p is: %d\n%**q is: %d\n*r is: %d\n\n", *p, *q, *r); 
}

Результат использования компилятора gcc:

Ожидаемый результат для строк:

Является:

x is: 1
y is: 2
z is: 3

p is: 6422288
q is: 6422284
r is: 6422280

*p is: 00000001
*q is: 00000003
*r is: 76036FED

Согласно моему пониманию, это не то, что должно появиться в последних трех строках, они должны давать то же значение, что и первая причина, есть ли причина этого результата или это правильно, и я что-то упускаю?

0
sarah 7 Сен 2020 в 05:18

1 ответ

Лучший ответ

Три мысли:

  1. printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r); недействителен. Вам нужно использовать %p, чтобы напечатать указатель.

  2. Все ваши операторы printf содержат слишком много символов процента.

  3. Я согласен с вашим основным пунктом. Предполагая, что вы удалили лишние символы процентов, вы должны увидеть это *p is 1, *q is 2, *r is 3.

https://repl.it/repls/OpenAngelicControlflowgraph#main.c

0
Bill Lynch 7 Сен 2020 в 02:26