首页 > 编程语言 > 详细

关于数组基础概念

时间:2020-03-11 01:44:41      阅读:49      评论:0      收藏:0      [点我收藏+]

数组的基本定义不在赘述

主要说一下容易错的地方

访问数组元素:

数组每个元素都分配一个下标,下标用作一个索引来精确定位一个数组中的特定元素,第一个元素分配下标 0,第二个元素分配下标 1,依此类推。

int hours [6];

                                       技术分享图片

 

 

 

 C++中的下标编号总是从零开始,数组中最后一个元素的下标比数组中元素的总数少 1,即hours[6]不存在

 hours 数组中的每个元素在被下标访问时都可以用作 int 变量 

hours[0] =20;

                                           技术分享图片

 

如果采用全局定义方式定义一个包含数值的数组,则默认情况下,其所有元素都被初始化为零。但是,如果定义的是局部数组,则没有默认的初始值

 

数组名和指针:可以将数组名赋值给一个指针,而赋值后的指针是指向数组首元素的,这让数组名看起来确像一个指针。

                         数组名可以像指针一样运算,对数组的索引和指针的运算看起来也是相同的。

                         数组名不等价于指针,大多数使用到数组名的地方,编译器都会把数组名隐式转换成一个指向数组首元素的指针来处理。只有两种情况下例外:

                       int a[]={0,1,2,3,4,5,6,7,8,9};

                        1.对数组名使用sizeof运算符

                         sizeof(a)
                        这将会得到整个数组所占的内存大小,a是长度为10的int(4字节)数组,运算结果是40。此时a代表的是数组所占用的那一整块内存。

                         2.对数组名取地址

                        &a

                        运算结果是数组的地址。注意,数组的地址和数组首元素的地址是不同的概念,尽管二者存储的值是相同的,但它们的跨度是不同的

                         &a表示数组地址,结果是指向该数组的指针;                                pa+1的值是pa所指空间的下一个空间的地址,偏移大小为整个数组的大小;

                        &a[0]表示数组首元素地址,其结果是指向该数组首元素的指针        pi+1指向a[1];

    int a[]={1,2,3};
    int (* pa)[3];
    int * pi;
    pa = &a;
    pi = &a[0];
  

                         除了上面说的两种例外,其他情况下编译器都将数组名隐式转换成指针常量

 

a[3]        // 自动转换成下面的表达式
*(a + 3)

a的值被转换成指针常量,指向第一个元素,向右移动3 * sizeof(int)个字节,然后解引用,便得到了第4个元素的内容

第一种写法会自动转换成第二种,这个过程需要一些开销,第二种写法通常效率更高

 

int p[3],int *p[3]和int (*p)[3] 的区别

 

1).int p[3]:定义了一个名为p的数组,数组有三个整形元素,p指向第一个元素,是一个常量,不可以更改再赋值

2).int (*p)[3]:定义了一个名为p的指针变量,该指针指向一个三元素数组,p是一个指针变量,可以重新赋值(int (*p)[3]  p是指向类型为int,长度为3数组的指针,即数组指针。)

int a[3]={1,2,3};
(*p)[3];
p=&a;

3).int *p[3]:定义了一个名为p的数组,该数组有三个元素,每个元素都是一个指针,指针指向整形变量; (定义了一个三维数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针)指针数组

 

一张图帮助理解:

技术分享图片

 

关于数组基础概念

原文:https://www.cnblogs.com/liu6666/p/12459643.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!