首页 > 试题广场 >

下面代码会输出什么?

[单选题]
下面代码会输出什么()
int main(int argc, char **argv)
{
    int a[4] = {1, 2, 3, 4};
    int *ptr = (int *)(&a + 1);
    printf("%d", *(ptr - 1));
}

  • 1
  • 2
  • 3
  • 4
&a + 1是地址空间加4
发表于 2020-08-24 17:12:39 回复(0)
&a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小。
发表于 2020-08-24 21:04:22 回复(1)
加一的话,跳一行
发表于 2020-08-22 01:01:09 回复(0)

打印一下

void test7() {

        int a[4] = { 1, 2, 3, 4 };
        printf("a     = %p\n\n", a);

        int* ptr = (int*)(&a + 1);
        printf("ptr   = %p\n", ptr);
        printf("ptr+1 = %p\n", ptr+1);
        printf("ptr+2 = %p\n\n", ptr+2);

        printf("*(ptr - 1) = %d\n", *(ptr - 1));
        printf("*(ptr - 2) = %d\n", *(ptr - 2));
}

输出

a     = 00BAF800

ptr   = 00BAF810
ptr+1 = 00BAF814
ptr+2 = 00BAF818

*(ptr - 1) = 4
*(ptr - 2) = 3

可以看出来,类型不同,指针加的字节数也不同。

发表于 2020-09-07 22:46:32 回复(1)
int a[5]={1,2,3,4,5};
    int *p=(int *)(&a+1);
    cout<<*(p-1)<<endl; //输出为5
int a[5]={1,2,3,4,5};
    int *p=(int *)&(a+1);
    cout<<*(p-1)<<endl;//输出为1

发表于 2020-10-10 13:23:16 回复(0)
<p>对数组这个变量取地址,加1则跨越整个数组的长度总和</p>
发表于 2020-09-07 21:48:05 回复(0)