Задачка по программированию: есть программа, написанная на языке Си. Сможете ли вы, не запуская её, сказать, что она напечатает? Чему равно 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.
Язык хамелеона может достигать длины большей, чем длина его тела. При охоте на насекомых хамелеон выстреливает язык на всю длину за 30 миллисекунд. После прямого попадания, как правило, мошки долго не живут.