1. 顺序存储 --- 数组

2018-06-01  本文已影响0人  執著我們的執著
  1. 顺序存储一般的结构如数组,标准的初始化时需要的是"基址,当前表长,最大表长"
  2. 数组的首地址(基址)就是数组名
  3. 数组是最常用的数据结构之一,在C/C++中经常对数组进行操作,作为一个顺序存储结构,其很容易实现随机查找第 i 个数据元素,但是相对的插入或删除时会移动大量的数据;故数组适用于相对稳定的线性表。

一般标准的操作包括:

//数组的插入和删除操作代码实现,后补,其他的操作比较简单


下面总结一下常见的数组易混淆的概念 (重要)

1 . 数组名和数组名取地址的区别

int a[2] = {1, 2};

int main()
{
    printf("a = %p\n", a);
    printf("&a = %p\n", &a);
    printf("a + 1 = %p\n", a+1);
    printf("&a + 1 = %p\n", &a + 1);

    return 0;
}

/*
a = 0x804a014
&a = 0x804a014
a + 1 = 0x804a018
&a + 1 = 0x804a01c
*/

《C和指针》 详细介绍了数组名 a 与 数组名取址 &a 的区别:

在C中,在几乎所有的使用数组的表达式中,数组名是一个常量指针(即该指针是一个常量),也就是数组第一个元素的地址。它的类型取决于数组元素类型:比如为 int 类型,那么数组名的类型就是 "指向 int 的常量指针"( int * const)类型
但是:在以下两种场合中,数组名并不是用常量指针来表示

即当数组名作为sizeof操作符单目操作符 & 的操作数时

上例中, a 和 &a 结果都是数组的首地址,但是类型完全不同

[注]
数组名仅仅"相当于"指针,并非严格意义上的指针,作为常量,不能作为左值,不能自加自减 (++,--);并且常量是无法取地址的,能够 &a ,是因为 a 的意义已不是数组名了。
a 与 &a[0]两者等价,均表示常指针,( int * const)类型,不能作为左值,自加自减。


两个数组赋值,int a[] 赋值给 int b[] ,不能通过首地址赋值的方式( b = a),因为数组名是常指针,不能作为左值,采用以下两种方式

上一篇 下一篇

猜你喜欢

热点阅读