c++ 数组地址偏移

  1. 指针运算就是在原地址加上(或减去)指针类型所占的字节数的倍数
int num = 16;
std::cout <<"num的地址:  " << &num << std::endl; 
int *p = &num;
std::cout <<"num+1的地址:" << p + 1 <<std::endl;

输出:
num的地址:  00000098D8EFFB44
num+1的地址:00000098D8EFFB48

如果不是原地址加上(或减去)指针类型所占的字节数的倍数,num的地址:00000098D8EFFB44 ,加上1变成00000098D8EFFB45,此时首元素占据00000098D8EFFB44-00000098D8EFFB47,根本从00000098D8EFFB45取不出数据来。

  1. 数组的地址就是数组首元素的地址,要想得到数组中后面元素,地址偏移解引用即可。
int nums[] {67,78,89,30,88,99};
    
cout << " nums    :" << &nums    << " "<< *(nums) << endl;
cout << " nums[1] :" << &nums[1] << " "<< *(nums+1) << endl;
cout << " nums[2] :" << &nums[2] << " "<< *(nums+2) << endl;
cout << " nums[3] :" << &nums[3] << " "<< *(nums+3) << endl;
cout << " nums[4] :" << &nums[4] << " "<< *(nums+4) << endl;
cout << " nums[5] :" << &nums[5] << " "<< *(nums+5) << endl;

输出:
nums    :00000098D8EFFB68 67
nums[1] :00000098D8EFFB6C 78
nums[2] :00000098D8EFFB70 89
nums[3] :00000098D8EFFB74 30
nums[4] :00000098D8EFFB78 88
nums[5] :00000098D8EFFB7C 99
  1. 堆内存中存放数组
//在堆内存当中开辟空间,然后存放一个数字8
int *p1 = new int(8);

//在堆内存当中开辟空间,存放一个数组,这个数组的长度是6,长度值6必须得指明
int *p2 = new int[6];
int *p3 = new int[6]{10,20,30,40,50,60};
    

*p3 = 100;
std::cout << "Array[0] "<<p3     << " "<< *p3     << std::endl;
std::cout << "Array[1] "<<p3 + 1 << " "<< *(p3+1) << std::endl;
std::cout << "Array[2] "<<p3 + 2 << " "<< *(p3+2) << std::endl;
std::cout << "Array[3] "<<p3 + 3 << " "<< *(p3+3) << std::endl;
std::cout << "Array[4] "<<p3 + 4 << " "<< *(p3+4) << std::endl;
std::cout << "Array[5] "<<p3 + 5 << " "<< *(p3+5) << std::endl;


//释放空间... 
delete[] p2;
delete[] p3;

输出:
Array[0] 000001FED554E7C0 100
Array[1] 000001FED554E7C4 20
Array[2] 000001FED554E7C8 30
Array[3] 000001FED554E7CC 40
Array[4] 000001FED554E7D0 50
Array[5] 000001FED554E7D4 60
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值