2013-12-05 2 views
-3
#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
int *(intArray+3); 
int i; 
int (intArray+3)=&i; 
*(intArray+3)=11; 
printf("%d%d",i,*(intArray+3)); 
getch(); 

в этой программе я использовал понятие * (INTArray + 3) = INTArray [3] с базовой программойЭтот выход программа должна быть 11

int *p; 
int i; 
p=&i; 
*p=11; 
printf("%d%d",i,*p); 

в этом случае о/р 11, 11 но 1-я программа основана на этой концепции plez help?

+4

Добро пожаловать в Переполнение стека. Вскоре прочитайте страницу [О программе]. Код C, который вы показываете, не будет компилироваться по многим причинам. Предоставьте компилируемый код перед тем, как задавать вопросы - посмотрите, как создать SSCCE ([Short, Self-Contained, Correct Example] (http://sscce.org/)). –

+0

, если intArray имеет тип int const *, вы не можете изменить адрес. – doptimusprime

ответ

2

Арифметика указателя возможна только после определения и инициализации указателя. Позвольте мне объяснить это:

Предположим, что массив intArray из 5 элементов;

int intArray[5]; 

Давайте предположим, что начальный адрес intArray является 2000. Теперь что означает (intArray + 3)? Это означает, что (intArray + 3) теперь относится к четвертому элементу (элементу 3) массива intArray, то есть теперь он указывает на местоположение 2012 (поскольку имя массива может использоваться как указатель на его первый элемент), предполагая тип int принимает 4 байт на машине. Когда вы размещаете оператор * перед этим, он разыскивает значение в этом месте, то есть *(intArray + 3) предоставит вам значение, хранящееся в местоположении 2012, что эквивалентно intArray[3].
Поскольку вы объявили intArray ни как указатель (для указателя он должен быть инициализирован), ни как массив, вы не можете разыменовать (intArray + 3). Это неверно, и программа не будет компилироваться.

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