Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
在此程序中,我使用了*(intArray + 3)= intArray [3]的概念
使用基本程序
在这种情况下,o / p为11,11,但是第一个程序是否基于此概念,请帮助?
假设
由于您既没有将
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
#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,但是第一个程序是否基于此概念,请帮助?
最佳答案
仅在定义和初始化指针之后,才可以使用指针算术。现在让我解释一下:
假设有一个由5个元素组成的数组intArray
;
int intArray[5];
假设
intArray
的起始地址为2000
。现在(intArray + 3)
在这里是什么意思?这意味着(intArray + 3)
现在引用数组intArray
的第四个元素(元素3),即现在它指向位置2012
(因为数组名称可用作指向其第一个元素的指针),假设int
类型在计算机上占用4
个字节。当您在*
运算符之前放置它时,它将取消引用该位置的值,即*(intArray + 3)
将为您提供存储在与2012
等效的位置intArray[3]
的值。由于您既没有将
intArray
声明为指针(必须对其进行初始化)又没有声明为数组,因此无法取消引用(intArray + 3)
。这是无效的,程序将无法编译。关于c - 该程序输出应为11 ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20393378/
10-09 12:32