разница между указателем и местоположением указателя - PullRequest
0 голосов
/ 24 сентября 2018

Этот код печатает разные значения для i и & i, и оба они не равны 10. Пожалуйста, объясните мне, что означают эти два числа.

#include<stdio.h>
int main(){
    int p=10;
    int *i=&p;
    printf("%d %d",i,&i);
}

Это то, как выглядит вывод

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вот модифицированная версия вашего кода с комментариями в printfs.Обратите внимание, что я добавил третий printf для ссылки на ваш int в p

#include<stdio.h>
int main(){
    int p=10;
    int *i=&p;
    printf("'i'  = %p is the address of the int stored in variable p\n",(void *)i);
    printf("'&i' = %p is the address of the pointer to an int called i\n",(void *)&i);
    printf("'*i' = %d is the int that is stored at the location in i which points to p\n",*i);
}

'i' = 0x7ffee4e63abc is the address of the int stored in variable p'&i' = 0x7ffee4e63ab0 is the address of the pointer to an int called i'*i' = 10 is the int that is stored at the location in i which points to p

0 голосов
/ 24 сентября 2018

i - это integer pointer, который будет использоваться для хранения адреса integer variable.В этом случае i сохраняется в области стека вашей основной памяти, когда вы печатаете &i, это означает, что вы печатаете адрес места, где хранится i.Когда вы печатаете i, это означает, что вы печатаете значение i (значение i является адресом p, потому что вы присвоили &p i этой строкой int *i=&p;).Я надеюсь, что это полезно для вас.

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