Переменная типа int
является переменной, способной содержать целочисленное значение. Переменная типа int*
является указателем переменной, которая может содержать целочисленное значение.
Каждый тип указателя имеет одинаковый размер и содержит те же элементы: адрес памяти, размер которого составляет 4 байта для 32-разрядных архитектур и 8 байтов для 64-разрядных архитектур. Их отличает тип переменной: poiting to.
Указатели полезны для адресации буферов и структур, распределенных динамически во время выполнения или любой переменной, которая должна использоваться, но хранится где-то в другом месте, и вы должны указать, где.
Арифметические операции с указателями возможны, но они не будут делать то, что вы думаете. Например, суммирование + 1
указателю типа int
увеличит его значение на sizeof(int)
, а не буквально 1
, потому что его указатель и логика здесь - это то, что вы хотите следующий объект этого массива.
Например:
int a[] = { 10, 20, 30, 40 };
int *b = a;
printf("%d\n", *b);
b = b + 1;
printf("%d\n", *b);
Он будет:
10
20
Поскольку b
указывает на целое значение 10
, и когда вы подвести 1
к нему, или любая переменная, содержащая целое число, а затем - до следующего значения, 20
.
Если вы хотите, чтобы выполнять операции с переменной, хранящейся в b
, вы можете использовать:
*b = *b + 3;
Теперь b
тот же указатель, адрес не изменился.Но массив 10, 20, 30, 40
теперь содержит значения 13, 20, 30, 40
, так как вы увеличили Элемент b
был до от 3
.
Целые числа не являются указателями. Указатели не являются целыми числами. –
«Указатель - это в основном целое число без знака». Нет, это не так. Указатель и целое - это совершенно разные абстракции. Основное представление не имеет значения (и побитовое кастинг - зло, поэтому даже не думайте об этом). –
Да, я понимаю, что я говорю, что это не указатель на неопределенное целочисленное значение – AbKDs