Я узнаю о указателях, и я запускаю эту программу из учебника, который дает интересный результат.Базовая программа, интересный выход? Объяснение
#include <stdio.h>
int main() {
int var = 20; /*actual variable declaration */
int *ip; /*pointer variable declaration*/
ip = &var; /*store addres of var in ip variable*/
printf("Address of var variable: %x\n", &var);
/*address stored in ip variable*/
printf("Address of stored in ip variable: %x\n", ip);
/*access the value using pointer */
printf("value of *ip variable: %x\n", *ip);
return 0;
}
И к моему пониманию, сайт говорит, что мой вывод должен быть две соответствующие ячейки памяти, и значение 20 для «Значение * ф переменной» части. У меня нет проблем с ячейками памяти, они оба выглядят одинаково, как и предполагалось, но последняя часть, сообщившая мне значение переменной * ip, равно 14?
Address of var variable: 6d73b8cc
Address of stored in ip variable: 6d73b8cc
value of *ip variable: 14
Что здесь происходит? Собран с НКУ, который дает одно предупреждение о формате% х ожидает целое число без знака, но аргумент 2 имеет тип ....
MorePointers.c:10:9: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("Address of var variable: %x\n", &var);
^
MorePointers.c:13:9: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("Address of stored in ip variable: %x\n", ip);
Поправьте меня, пожалуйста, если я не прав, но это могло быть связано с формат, который, когда ожидается целое число без знака, может привести к тому, что число будет равно 20? являющееся целым числом без знака, находится в пределах значений от 0 до 65535 или от 0 до 4 294 967 295, тогда как целое число находится в пределах значений -32,768 до 32,767 или -2,147,483,648 до 2,147,483,647?
Я ожидал только десятичной версии, так как thasts, что учебники того же кода, выведенные, что, как говорится, ваш ответ имеет смысл. – Colabambino