zoukankan      html  css  js  c++  java
  • 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;
    
    }

    &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]是等效的;

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

  • 相关阅读:
    题目分享M
    题目分享L
    题目分享J
    题目分享I
    FarmCraft
    C++语言中一些可能会用到的函数及头文件
    最小生成树(Kruskal & Prim & Boruvka)
    线段树板子(懒惰标记)
    FarmCraft——树形DP+贪心
    tarjan算法板子
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12357613.html
Copyright © 2011-2022 走看看