对数组名取地址

原创 2012年03月26日 19:57:24

问题:

请问这道题输出结果是多少?为什么?
main()  
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1));
}


答案:2,5


分析:

第二个(&a+1)中的&a取得是整个数组的首地址,&是对整个数组操作的,所以(&a+1)即ptr1指向了a[4]后面的内存区,ptr1[-1]指针后退一步,指向a[4]输出为5


数组名与数组名取址的区别: 
设有 int   a[5]; 
那么 a就是&a[0];是int   * 
而   &a是   int   (*)[5]即是指向数组int   [5]的地址。 
验证: 
void   main() 

      int   a[5]; 
      printf( "add   a=%p,   add   a+1=%p ",a,a+1); 
      printf( "add   &a=%p,   add   &a+1=%p ",&a,&a+1);     

可以发现a+1的地址为a地址再加sizeof(int) 
面&a+1的地址是&a地址再加5*sizeof(int) 
a与&a两者都是是指针,且值相同,但指向类型不同。


见帖子http://topic.csdn.net/u/20120326/15/7c839f78-ec68-4a43-8552-47e0c0365ab2.html?95165

二维数组名再取地址是什么

ww6582163 | 分类:互联网 | 浏览246次 分享到: 举报| 2013-11-26 18:21提问者采纳 此处...
  • Sayesan
  • Sayesan
  • 2014年09月02日 09:22
  • 1324

数组名取地址带来的问题

我们都知道数组名取地址的值和数组的首地址是同一个值,但是他们的指类是不同的,如果强转的话是会出问题的。看看下面这个程序片段: #include int foo(char **t) { printf...
  • choumin
  • choumin
  • 2016年05月08日 18:56
  • 177

数组名取地址是什么?

int a[5]={1,2,3,4,5}; int b[100]; 一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题 问题一: 看到一篇文章这...

C语言数组名取地址

面试中遇到的C语言数组名取地址的问题

C语言——数组名、取数组首地址的区别(一)

目录: 1. 开篇 2. 论数组名array、&array的区别 3. array、&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这...

数组名、取数组首地址的区别

1 int a[10]; 2 int *p = a; 3 int (*q)[10] = &a; 第二个为指向数组的指针. a只是a[0]的地址,a+1就是a[1]的地址了,&a是整个a[1...
  • weiqubo
  • weiqubo
  • 2016年10月07日 21:53
  • 2154

C语言——数组名、取数组首地址的区别(二)

目录 数组指针与指针数组 再谈array与&array的区别 array与&array的区别之讨论 array与&array的区别之总结 参考 1. 数组指针与指针数组 在初学C语言时,很难分清楚数...

C语言数组首地址和数组名取地址区别

申明:本文系原创,转载时请注明出处,本人保留追究责任的权利。 原文地址:http://hi.baidu.com/surfmygod/blog/item/53d44914cdb8a5d6a7ef3...

C语言数组首地址和数组名取地址区别

申明:本文系原创,转载时请注明出处,本人保留追究责任的权利。 原文地址:http://hi.baidu.com/surfmygod/blog/item/53d44914cdb8a5d6a7ef3...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对数组名取地址
举报原因:
原因补充:

(最多只允许输入30个字)