黑马程序员技术交流社区

标题: 关于指针 [打印本页]

作者: 选择天涯    时间: 2016-6-25 19:17
标题: 关于指针
马上要点招了  回头看看C语言   不会了

main( )
{  
   int a[5]={1,2,3,4,5};  
   int *ptr=(int *)(&a+1);   
   printf("%d,%d",*(a+1),*(ptr-1));
}
作者: blackcard    时间: 2016-6-25 22:24
&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;
}
作者: blackcard    时间: 2016-6-25 22:25
&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;
}
作者: wzg682735    时间: 2016-6-27 08:57
不错!!
作者: ldk1991125    时间: 2016-6-29 09:25
一边记,一边忘
作者: SSIrreplaceable    时间: 2016-7-1 10:02
a和&a虽然打印出来地址值都是一样,但是意义不同,a表示的是数组元素的首地址,&a表示的是整个数组的地址




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2