Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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