数组的深入理解

C语言中:

                1、变量的定义: 对象和变量要区分

                   变量是一种声明,通过声明,把一个 名字(人为定义) 与 对象对应起来,当我们使用该名字的时候,就表示我们对该对象进行某种操作。
      但是并不是每个对象都有名字,也并不意味着有对应的变量。比如临时对象(temporary object)就没有一个名字与之关联

      (不要误称为临时变量,这是不正确的说法)按照C的定义,左值是一个引用到对象的表达式,通过左值我们可以取出该对象的值。
      通过可修改的左值表达式(modifiable lvalue)我们还可以修改该对象的值

                   例如:   对象 = 刘德华;在计算机中进行声明 char andy; 变量 = andy,andy上进行某种操作,即是对刘德华同种操作。

                2、& 只能对左值或函数 操作

                3、数组 是特殊的指针类型, 数组是常量指针,数组元素是只读的。

声明一个数组包括 :数据类型            数组名[数组长度]

例如  int a[5] = {10,20,30,40,50}.

指针指向一段 5个整型 的 连续内存.

因此  *(a+3)  = 40 ,取值符括号里面是地址。而偏移的地址等于 3*int(所占字节)。

                                回到代码中,只声明了 int类型 的 a[5] 数组,a+3这个变量并没有声明,也没有与之对应的对象,也不就存在。

                                如果用取地址符去取,根本无法取到对象的地址。肯定是错误的。因为每次重新运行程序,系统又会随机分配空余空间,所以第一张图与二、三
张图地址不一样,但是不影响,这里说明一下。而且细心的人可以发现两个数组地址是连续的。而且先存入内存的反而是低位,后存的反而是高位。

由图可知,整形数组a的每个元素之差为4个字节,本机整形占4个字节,字符型占1个字节

内存中划红线的2个16进制数分别 对应 10,20,30,40,50。每个数之间相隔4个字节。

同理可得

分别对应  a b c d ‘\0’

还有就是与数组不同类型的不可以赋值。代码中p类型一样才可以,赋地址成功。

  

猜你喜欢

转载自www.cnblogs.com/Fsiswo/p/9286948.html