C++Review10_数组

#include <iostream>

using namespace std;

int main() {
    int a[4] = {1,2,3,4};
    cout<<"sizeof(a) is    "<<sizeof(a)<<endl;
    cout<<"sizeof(a[0]) is "<<sizeof(a[0])<<endl;
    cout<<"addr of &a is   "<<&a<<endl;
    cout<<"addr of a is    "<<a<<endl;
    cout<<"addr of &a+1 is "<<&a+1<<endl;
    cout<<"addr of a+1 is  "<<a+1<<endl;
    cout<<"addr of a[0] is "<<&a[0]<<endl;
    cout<<"addr of a[1] is "<<&a[1]<<endl;
    cout<<"addr of a[2] is "<<&a[2]<<endl;
    cout<<"addr of a[3] is "<<&a[3]<<endl;

    cout<<"&a+1 - &a is "<<(int)(&a+1)-(int)&a<<endl;

}

C++Review10_数组

 

&a 和 a 的值虽然都是一样的。但是表示的含义不同

&a 表示的是整个数组的首地址。

a   表示的是首元素的首地址。

实际上a和&a[0]是等价的。

 

 

所以这就导致了&a+1、a+1结果不一样。

&a+1 表示的是    数组首地址+偏移量*sizeof(整个数组大小)

a+1   表示的是    首元素的首地址+偏移量*size(元素大小)

 

 

指针形式访问、下标形式访问:

a[0]、a[1]... 就是数组下标的访问形式;这种形式可以访问到数组中的每个元素;

a+1 则是指针的访问形式;

可看出来a+1和a[1]是等效的;

指针的访问形式会由系统进行地址偏移的计算。使用者只需要提供偏移量。

 

原文链接: https://www.cnblogs.com/grooovvve/p/12357613.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++Review10_数组

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331582

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:06
下一篇 2023年3月1日 下午6:07

相关推荐