zoukankan      html  css  js  c++  java
  • C语言--对数组地址的解析

    在C编程中,我们进程会用到数组,这看起来很简单,因为,数组就是存储相同类型元素的集合嘛,不过,当你还没考虑到数组的地址问题时,一切都是简单的,如果你接触了数组中的地址概念,也许你会改变你的想法。

    下面,我列出几个例子,看看这些例子输出的会是什么:

           首先给出数组的定义:int a[10];
        1.  cout<<a<<endl;
        2. cout<<&a<<endl;
        3.  cout<<a +1<<endl;
        4.  cout<<&a +1<<endl;

         是不是有点迷惑了?

    好吧,现在,我来一一解释这些东西:

     

    1.cout<<a<<endl;

    当我们定义了一个数组时,我们给数组起了一个名字,叫做“a”,那么a指代的就是系统给我们分配的那一块内存(这个例子中是40个字节),那么自然而然,a代表的就是这块内存的起始地址

     

    2. cout<<&a<<endl;

    很明显,这是一个意思,对a进行取地址操作,得到的仍然还是那块内存的起始地址

     

    3. cout<<a + 1<<endl;

    这时,我们对起始地址进行加1操作,判断结果是什么,我们需要知道a能存储的是什么类型的数据,对于这个例子,a中存储的整型数据,所以,它指代的是a中第二个元素的地址值,是对于起始地址加4个字节的结果值

     

    4. cout<<&a + 1<<endl;

    这个可能是最难理解的一句话,我们在想得到结果之前,还需要看a代表的是什么,a代表的是能存储10个整型变量的一段内存,所以,对&a进行加1操作,得到是下一个能存储10个整型变量的内存的首地址

     

    下面,给出测试的代码和效果截图:

     

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
    
    	int a[10];
    
    	cout<<a<<endl;
    	cout<<&a<<endl;
    	cout<<a + 1<<endl;
    	cout<<&a + 1<<endl;
    
    	system("pause");
    	return 0;
    }
    


     

    看看结果,是不是和我说的一样。


  • 相关阅读:
    eslint 屏蔽html的检查
    css 自定义悬浮窗写法
    echarts象形图图例显示问题
    win10上rocketMQ的部署过程
    死锁以及如何避免死锁
    volatile的一个例子-通俗易懂
    Java四种引用类型
    记录下:安全|API接口安全性设计(防篡改和重复调用)
    了解聚集索引,非聚集索引,联合索引,索引覆盖
    mybatis 查询树形结构
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3223841.html
Copyright © 2011-2022 走看看