#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int x = 2;
int *pointer2 = &x;
int number = &x;
printf("%x\n",number);
printf("%x\n",number+1);
printf("%x\n",pointer2);
printf("%x\n",pointer2+1);
return EXIT_SUCCESS;
}
Я получаю предупреждение от ССЗА, что «инициализация делает целое число от указателя без приведения [по умолчанию включено]» для переменного числа, но когда я компиляцию я получаю следующий вывод:Адресация в C
5da24540
5da24541
5da24540
5da24544
Очевидно, что вышеизложенное не происходит, поскольку мы можем видеть на первых двух строках вывода, что адрес увеличивается только на 1, а на 4 во втором случае. Также объясните, что & возвращает адрес, который может быть назначен другим переменным как int или это указатель в нем, который может быть назначен только для типа указателя.
Выход, который вы получаете, является нормальным. Если вы добавите X в указатель на Y, тогда X * sizeof Y будет добавлен к указателю. Размер int равен 4 (по крайней мере, в вашем случае), поэтому вы получаете 5da24544 вместо 5da24540. –
Оператор '&' дает указатель. Значение указателя называется адресом. Адрес также может рассматриваться как произвольное целочисленное значение, но вы обычно не выполняете числовые манипуляции на адресе, кроме как для взаимодействия с оборудованием, которое проверяет адреса за пределами ядра ЦП. – Potatoswatter