【C/C++】数组的基本概念

数组是一种数据格式,能够存储多个同类型的值,一维数组可用来实现线性表的顺序存储、哈希表等,二维数组可用来保存图的邻接矩阵等。

1. 一维数组的声明与字符数组

1.1 一维数组的声明与初始化

(1) 一维数组的声明

一维数组声明应指出以下三点:

1) 存储在每个元素中的值的类型;

2) 数组名;

3) 数组中的元素数,数组的元素数必须用值大于等于1的常量表达式定义。

数组定义中的类型可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的复合类型。数组定义中类型不能是引用,即没有引用数组,这是因为引用是不能赋值的,而数组中的元素必须可以被赋值。

虽然没有引用数组,但数组可以有引用。

【示例】定义数组a的引用。

1 int a[6] = {0, 2, 4, 6, 8, 10};

【解答】

1 int (&p)[6] = a;

如上,p是数组a的引用。数组的引用可以用于函数实参传递。此时可以确保传递过来的数组长度合乎要求。

(2) 一维数组的初始化

在定义数组时,可为其元素提供一组用逗号分隔的初值,这些初值用花括号{}括起来,称为初始化列表。

数组元素初始化时,若没有显式提供元素初值,则元素会被像普通变量一样初始化:

1) 函数体外定义的内置类型数组(即内置类型的全局数组),元素初始化为0;

2) 函数体内定义的内置类型数组,元素无初始化(注意,若只初始化部分元素,其后的元素此时也会被初始化为0);

3) 如果不是内置类型,则不管其在哪定义,自动调用其默认构造函数为其初始化,若该类无默认构造函数则会报错。

【示例】给定如下代码:(阿里巴巴)

1 int x[4] = {0}; int y[4] = {1};

数组x和y的值为____?

A. {0, 0, 0, 0}, {1, 1, 1, 1}

B. {0, 0, 0, 0}, {1, 0, 0, 0}

C. {0, 不确定}, {1, 不确定}

D. 与编译器有关

【解答】 B

1.2 C风格字符串与字符数组

(1) C风格字符串

C风格字符串包括两种:

1) 字符串常量

以双引号括起来的字符序列是字符串常量。为了兼容C语言,C++中所有的字符串常量都由编译器自动在末尾添加一个空格符。

字符常量‘a‘表示单个字符a,然而"a"是字符串常量,其表示字母a和空字符(null)两个字符。

2) 末尾添加了‘\0‘的字符数组

C风格字符串末尾必须有一个字符‘\0‘。

(2) 字符数组

字符数组既可以用一组由花括号括起来、逗号隔开的字符常量进行初始化,也可以用一个常量字符串(末尾有空格)进行初始化。然而要注意的是这两种初始化方式并不完全相同,因为字符常串常量包含一个额外的空字符用于结束字符串。当使用字符串常量值来初始化创建的新数组时,将在新数组末尾加入空字符。

【示例】给出以下定义,则正确的叙述为_____。(淘宝)

1 char x[] = "abcdefg";
2 char y[] = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘}; 

A. 数组x和数组y等价

B. 数组x和数组y长度相同

C. 数组x的长度大于数组y的长度

D. 数组x的长度小于数组y的长度

【解答】C

2. 二维数组

2.1 二维数组的声明与初始化

二维数组是最常用的高维数组。一维数组可视为一行数据,二维数组更像是一个表格——既有数据行也有数据列。

二维数组的初始化有分为两种,一种是按行初始化。和处理一维数组一样,程序员可以使用由花括号括起来的初始化列表来初始化多维数组的元素。对于多维数组的每一行,可以再用花括号指定其元素的初始化行式:

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

另一种是顺序初始化:

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

C++规定,在声明和初始化一个二维数组时,如果对二维数组的所有元素都赋值,则第一维(行数)可以省略。但注意第二维不能省略。同样,在声明更高维的数组时,也只有第一维可以省略。

2.2 行优先存储与列优先存储

二维数组的行优先存储是指在内存中,先将二维数组的第一行按顺序存储,接着就是第二行的数据,然后是第三行的数据……

二维数组的列优先存储是指在内存中,先将二维数组的第一列按顺序存储,接着就是第二列的数据,然后是第三列的数据……

在C/C++中,二维数组是按照行优先顺序连续存储的。

【示例】有一矩阵大小为16K*16K,若对两个这样的矩阵做加法运算,行优先读取与列优先读取的区别是_____?(腾讯)

A. 一样快    B. 行优先快    C. 列优先快    D. 无法判断

【解答】B

时间: 2024-10-09 09:53:27

【C/C++】数组的基本概念的相关文章

第一章 数组与指针概念剖析

数组与指针生来就是双胞胎,多数人就是从数组的学习开始指针的旅程的.在学习的过程中,很自然就会经常听到或见到关于数组与指针的各种各样的看法,下面我节选一些在各种论坛和文章里经常见到的文字: “一维数组是一级指针” “二维数组是二级指针” “数组名是一个常量指针” “数组名是一个指针常量” ........................ 这些文字看起来非常熟悉吧?类似的文字还有许多.不过非常遗憾,这些文字都是错误的,实际上数组名永远都不是指针!这个结论也许会让你震惊,但它的确是事实.但是,在论述这

PHP "数组变量"之"写时复制的要点" 只有数组才有的概念。

1.如果数组指针位置非法,复制时,会将新数组指针初始化! 2.值传递时,PHP采用了一个COW(写时复制,copy on write)的优化措施! 写时复制的两个要点: <?php $arr1 = array('吕布','赵云','典韦'); end($arr1);next($arr1); //非法了 $arr2 = $arr1; //复制数组////var_dump($arr2);echo '<br>';var_dump(current($arr2));//初始化$arr2      

6-1 array 数组的基本概念

常规一个变量里只能保存一个值,数组变量可以存储多个值变量的每一个字符都有一个索引,每一个索引对应一个字符数组中的每一个索引对应的是一个字符串 定义和引用数组举例:关联数组需要事先声明查看当前的普通数组 原文地址:http://blog.51cto.com/5450935/2096551

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

Java--分支语句、循环、数组、控制台输入语句、常用数学函数

**-----本章节-----** 1.分支语句 2.循环 3.数组 4.控制台输入语句 5.部分常用的数学函数 ============================================================== 一分支语句 1.概念 (1)分支语句又称条件语句条件语句使部分程序可根据某些表达式的值被有选择地执行. (2)Java编程语言支持双路 if和多路 switch 分支语句. ===========================================

C语言之二维数组

二维数组及其指针 1 ) 在了解二维数组之前,我们先来了解一维数组及其指针 我们知道,一维数组中:数组名代表-->数组首元素的首地址    (千万不要认为是数组的首地址(&a),绝对不是) 在内存中,该代码的表现形式如下图:</span> #include<stdio.h>   {         int a[4];         int *p  = a;  //表明该指针指向了数组的首元素地址,当然也可以写为 int *p = &a[0];        

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

JavaScript权威设计--JavaScript数组(简要学习笔记九)

1.数组的创建 如: var a=[1.1,null,"a"]; var b=[1, ,3]; //中间的那个元素是undefined var c=[ , , ] 这里c.length你是不是以为是3? 哈哈,长度应该是2.因为数组直接量的语法允许有可选的结尾逗号. 2.数组索引的其他种类 a[-1.23]=true    //创建一个名为-1.23的属性 a["1000"]=0    //如果是字符串,它就转换为数组的索引 a[1.000]    //和a[1]相

10-C语言数组、字符串

一. 数组的基本概念 一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢? 1. 什么是数组 数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的 2. 数组的特点 l 只能存放一种类型的数据,比如int类型的数组.float类型的数组 l 里面存放的数据称为“元素” 二. 数组的定义 1. 定义 l 声明数组的类型 l 声明数组的元素个数(需要多少存储空间) 2. 格式 元素类型 数组名[元素个数]; 比如:int ages[3]; 3. 简单使用 l 简单初始