Задачка по программированию: есть программа, написанная на языке Си. Сможете ли вы, не запуская её, сказать, что она напечатает? Чему равно x в конце программы?
#include <stdio.h>int main(int argc, char**argv)
{
unsigned long* x;
x = 0;
x = x + 1;
printf("X = %lu\n", x);
return 0;
}
Ответ:
Программа напечатает
X = 4
Переменная x имеет тип "указатель на unsigned long". На большинстве современных архитектур процессоров unsigned long занимает 4 байта памяти.
Правила работы с указателями в C таковы, что увеличивая или уменьшая указатель на некоторое приращение, физический адрес, на который он ссылается, изменяется на величину, равную размеру типа данных, на которые ссылается указатель, умноженную на приращение. В данном случае указатель увеличится на sizeof(unsigned long) * 1 = 4.