该程序输出应为11

时间:2013-12-05 06:53:24

标签: c

#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] 与基础程序

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

在这种情况下,o / p是11,11,但第一个程序是基于这个概念plez帮助吗?

1 个答案:

答案 0 :(得分:2)

只有在定义和初始化指针后才能进行指针运算。现在让我解释一下:

假设有一个包含5个元素的数组intArray;

int intArray[5];

我们假设intArray的起始地址是2000。现在(intArray + 3)在这里意味着什么?这意味着(intArray + 3)现在引用数组intArray的第四个元素(元素3),即现在它指向位置2012(因为数组名称可以用作假设int类型在机器上占用4个字节,则指向其第一个元素的指针。当您在其前面放置*运算符时,它会取消引用该位置的值,即*(intArray + 3)将为您提供存储在2012位置的值,该值等于{{1} }。
由于您既未将intArray[3]声明为指针(指针必须初始化),也不作为数组,因此不能取消引用intArray。这是无效的,程序将无法编译。