zoukankan      html  css  js  c++  java
  • 深入学习数组

     深入学习一下数组

    从内存角度来理解数组

    (1)从内在角度讲,数组变量就是一次分配多个变量,而且这多个变量在内存中的存储单元是次相连接的。

    (2)我们分开定义多个变量(譬如inta,b,c,d;)和一次定义一个数组(int a[4]) ;这两种定义方法相同点是都定义了4个int型变星, 而且这4个变星都是独立的单个使用的;


    从编译器角度来理解数组

    (1)从编译器角度来讲,数组变量也是变量,和普通变量和指针变量并没有本质不同。变量的质就是一个地址,这个地址在编译器中决定具体数值,县体数值和变量名绑定,变量类型决定个地址的延续长度。

    (2)搞清楚:变量、变量名、变量类型这三个概念的具体含义,很多问题都清楚了。int a;  char a;
     

    数组中几个关键符号(a  a[0]  &a  &a[0])的理解 (前提是int a[10])

    (1)这4个符号搞清楚了,数组相关的很多问题都有答案了。理解这些符号的时候要和左值右值结合起来,也就是搞清楚每个符号分别做左值和右值时的不同含义。

    (2)a就是数组名。a做左值时表示整个数组的所有空间(10x4=40字节) ,又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值; a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最开始第一个字节的地址)。a做右值等同于&a[0];

    (3)a[0]表示数组的首元素,也就是数组的第0个元素。 做左值时表示数组第0个元素对应的内存空间(连续4字节);表示数组第0个元素的值(也就是数组第0个元素对应的内仔空间中存储的那个数)

    (4)&a就是数组名取地址,字面意思来看就应该是数组的地址。&a不能做左值(&a实质是一个常量,不是变量因此不能赋值,所以自然不能做左值);&a做右值时表示整个数组的首地址

    (5)&a[0]字面意思就是数组第0个元素的首地址(搞清楚[  ]和&的优先级,[  ]的优先级要高于&,所以a先和[  ]结合起来再取地址) ,做左值时表示数组首元素对应的内存空间,做右值时表示数组首元素的值(也就是数组首元素对应的内存空间中存储的那个数值)。做右值时&a[0]等同于a。

     总结:
    1: &a和a做右值时的区别: &a是整个数组的首地址,而a是数组首元素的首地址。这两个在数值上是相等的,但是意义不相同,意义不相同会导致他们在参与运算的时侯有不同的表现。
    2: a和&a[0]做右值时意义和数值完全相同,完全可以互相替代。
    3: &a是常量,不能做左值。
    4: a做左值代表整个数组所有空间,所以a不能做左值。
  • 相关阅读:
    编程珠玑(续) 读书笔记 -(第三章 程序员的忏悔)
    java for循环
    java 中的 instanceof
    大脑学习
    voa 2015.4.29
    编程珠玑(续) 读书笔记 -(前言+第一章性能监视工具)
    voa 2015 / 4 / 27
    voa 2015 / 4 / 26
    背包问题 算法实现
    LCS 算法实现
  • 原文地址:https://www.cnblogs.com/sanshijvshi/p/10280012.html
Copyright © 2011-2022 走看看