c语言中的输出问题

c语言中的输出问题,c,output,C,Output,ptr可以假定具有地址1000:2000 代码: int ptr[2]; printf("%p %p %p",&ptr+1,ptr+1,ptr); 以上代码的输出是什么 我的尝试: 由于我不知道如何将1000:2000解释/转换为一个地址,我手动尝试了 我试着把ptr的地址看作10000+2000=12000 因此,&ptr=12000和&ptr+1=12000+sizeof(int) ptr是指向的第一个元素的地址,同样ptr+1是第二个元素的地址 是这样吗? 我如何测试它?如果你知

ptr
可以假定具有地址
1000:2000

代码:

int ptr[2];
printf("%p %p %p",&ptr+1,ptr+1,ptr);
以上代码的输出是什么

我的尝试:
由于我不知道如何将
1000:2000
解释/转换为一个地址,我手动尝试了

我试着把
ptr
的地址看作
10000+2000=12000

因此,
&ptr=12000
&ptr+1=12000+sizeof(int)

ptr
是指向的第一个元素的地址,同样
ptr+1
是第二个元素的地址
是这样吗?

我如何测试它?

如果你知道类型,这是简单的指针算法

int ptr[2];
printf("%p %p %p",&ptr+1,ptr+1,ptr);
ptr
是数组的名称,它衰减为指向第一个元素的指针。如果它是一本旧书,就让它成为
1000:2000

因此,
ptr+1
是一个更进一步的元素,因此,如果
int
的大小为4,
1000:2004
。(在本书中,
int
的大小可能为2,因此应该是
1000:2002

然而,
&ptr
是指向数组的指针。它指向同一个位置-
1000:2000
,但指向一个更大的项目:两倍大。所以加上1,结果会增加两个整数的大小,即8和4。所以
&ptr+1
让你
1000:2008
resp<代码>1000:2004作为答案

+-------------------------------------+
|{ ptr[0]  ptr[1] } {ptr1[0],ptr1[1]} |
|   ^      ^           ^              |
|   |      |           |              |
|  ptr   ptr+1         |              |
|   |                  |              |
|  &ptr              &ptr+1           |
+-------------------------------------+
很容易理解
ptr
指针是这个数组的第一个地址项,
ptr+1
指针是数组的第二个地址项
&ptr
,它是一个指针点a
int数组[2]
int是一个
int(*x)[2]
,因此&ptr+1表示地址移动a
int数组[2]

下面是一个测试代码:

  #include <stdio.h> 
  int main()
  {
      int ptr[2];
      int  i;
      for (i =0; i <3; ++i)
          printf("ptr + %d is :   %p\n",i,&(ptr[i])); 
      printf("\n&ptr +1 :    %p\nptr+1  :    %p\nptr  :    %p\n",&ptr+1,ptr+1,ptr);
  }
#包括
int main()
{
int-ptr[2];
int i;

对于(i=0;i“如何测试?”-运行它怎么样?第二个和第三个参数应该是0,因为它们被初始化为0。第一个参数应该只是数组中第一个项目的地址+1@NoIdeaForNameptr是一种array@boxed__l是的…数组是C++中的指针,我的朋友读:PTR被假定为PTR的地址或PTR指向的地址:1000:@它们都是盒装的。
ptr
不是指针,而是数组。所以
ptr
&ptr
指向同一个位置,但有不同的类型。毫无疑问,在汇编语言或其他语言中,我们不是像我那样添加地址以获得实际的内存地址吗expain@boxed__l我不知道你到底是什么意思。你是说将
段:偏移量
转换为
段*10+偏移量
?这就是我在DOS/Real模式下的意思。现在在PC上,地址仅为32或64位数字。之所以被接受,是因为“一张图片抵得上千言万语”
ptr + 0 is :    0xbf892614         <---the same as ptr        base address   
ptr + 1 is :    0xbf892618         <---the same as prt+1      4 byte add
ptr + 2 is :    0xbf89261c         < --the same as &ptr +1    4 byte add

&prt +1    :    0xbf89261c      
ptr+1      :    0xbf892618     
ptr        :    0xbf892614