2016-10-02 2 views
-2

В 32-разрядной системе, где адреса начинаются с 1000, какими будут следующие адресные значения?Выполнение c-программы на 32-разрядной машине

int main() 
{ 
    int a[10]; 
    a; 
    a++; 
    &a+1; 
} 

Я попытался напечатать то же самое в операторах печати, но это дает мне ошибку.

+0

'A ++;' не может. 'a' является константой, что означает массив. – BLUEPIXY

+0

* Какой * адрес начинается с '1000'? Из массива? Вы знаете, что массивы фиксированы на месте, вы не можете изменить размещение массива, что означает, что любое выражение, пытающееся изменить размещение массивов (например, 'a ++'), является недопустимым. –

+0

Также я рекомендую вам прочитать [это мое сообщение в блоге] (https://ghost.pileborg.se/2016/08/28/the-difference-between-arrays-decaying-to-pointers-and-pointers-to- массивы /), он пытается объяснить массивы и указатели и все такое. Самое главное это «показывает» разницу между «a + 1» и «& a + 1». –

ответ

0

Вы не можете увеличить значение массива фиксированного размера, как int a[10] или char str[10]. при указателях возможно увеличение адреса. , например

char *a="abcd"; 
printf("%p",a); //prints the address of a lets take 1000 
a++; //increments the address by 1(size of character is 1 byte); 
printf("%p",a); //prints 1001 

, но в случае целого числа, например

int *a={1,2,3,4}; 
printf("%p",a); //prints the address of a, lets take 1000 
a++; 
printf("%p",a) //prints 1004 (because the size of integer in 32 bit machine is 4 bytes. 
+0

Лучше всегда использовать '% p' для печати указателей. Это делает ваш код правильным, даже если вы портируете его на 64-разрядную машину. –

+0

Спасибо, я его модифицировал. –

Смежные вопросы