数组和指针的区别(a和&a以及&a[0]的区别)

 一、一维数组
*这里记住数组的首地址和数组首元素的地址是不一样的,虽然他们的值是一样的,但是代表的意思不一样;
*数组  int a[5];
*      a是数组的共五个整形数据的内存的名字,是一块连续的地址的名字;
*      a代表首元素的地址同&a[0]是一样的;所以a+1代表的是第二个元素的地址
*      &a则是整个内存空间的地址,所以&a+1代表的是数组之后的另一块数组的首地址,已经超过数组a了,则*(&a + 1)越界


*   a 、 &a  、 &a[0]的值是一样的,但是代表的意义不同
*  a 和 &a[0]都是代表首元素的地址,+1 之后都是a[1]的地址,所以*(a+1)表示a[1]的值
*  &a 则代表整个数组的内存地址,+1 之后越界到数组外面去了


例子:
#include<iostream>
using namespace std;


int main()
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
cout << *(a + 1) << "  " << *(ptr-1) << endl;
system("pause");
return 0;

}


二、二维数组

     int a[3][2] = {1,2,3,4,5,6};
    cout << *(*(&a[0] + 1)) << "   " << *(*(&a[0] + 1) + 1) << endl;
    //a[0]是第一组元素,算一个元素,也是地址,所以&a[0]是一个二重指针;那么后面就需要两重间访
    //又因为数组中a 和 &a[0]意思相同,都是第一个元素的地址(不同于&a是整个数组的首地址)
    //所以上面还可以写成*(*(a+1)+1)的形式都是表示的a[1][1];
    cout << *(*(a+1)+1) << endl;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值