A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 选择天涯 中级黑马   /  2016-6-25 19:17  /  1200 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

马上要点招了  回头看看C语言   不会了

main( )
{  
   int a[5]={1,2,3,4,5};  
   int *ptr=(int *)(&a+1);   
   printf("%d,%d",*(a+1),*(ptr-1));
}

5 个回复

倒序浏览
&a+1 将偏移一个a[5]的大小(即5个int的字节大小)
(注:在题目中a+1与&a+1的偏移量是不一样的)
&(ptr-1)则相当于回到原本a[5]的地址
可以通过以下代码查询地址变化:
希望对你有帮助~~

#include <stdio.h>

int main(void)
{
        int a[5]={1,2,3,4,5};  
        int *ptr=(int *)(&a+1);
        printf("%p\n",&a);
        printf("%p\n",&a[0]);
        printf("%p\n",&a[1]);
        printf("%p\n",&a[2]);
        printf("%p\n",&a[3]);
        printf("%p\n",&a[4]);
        printf("%p\n",a);
        printf("%p\n\n",a+1);
       

        printf("%d,%d\n",*(a+1),*(ptr-1));
        printf("%d,%d",*(a+1),*ptr-1);
        return 0;
}
回复 使用道具 举报
&a+1 将偏移一个a[5]的大小(即5个int的字节大小)
(注:在题目中a+1与&a+1的偏移量是不一样的)
&(ptr-1)则相当于回到原本a[5]的地址
可以通过以下代码查询地址变化:
希望对你有帮助~~

#include <stdio.h>

int main(void)
{
        int a[5]={1,2,3,4,5};  
        int *ptr=(int *)(&a+1);
        printf("%p\n",&a);
        printf("%p\n",&a[0]);
        printf("%p\n",&a[1]);
        printf("%p\n",&a[2]);
        printf("%p\n",&a[3]);
        printf("%p\n",&a[4]);
        printf("%p\n",a);
        printf("%p\n\n",a+1);
       

        printf("%d,%d\n",*(a+1),*(ptr-1));
        printf("%d,%d",*(a+1),*ptr-1);
        return 0;
}
回复 使用道具 举报
不错!!
回复 使用道具 举报
一边记,一边忘
回复 使用道具 举报
a和&a虽然打印出来地址值都是一样,但是意义不同,a表示的是数组元素的首地址,&a表示的是整个数组的地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马