黑马程序员技术交流社区
标题:
关于指针
[打印本页]
作者:
选择天涯
时间:
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