栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C语言数组详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言数组详解

数组 一、数组的概念 1、数组的一般概念
  • 数组:按照一定规律排列的具有相同数据类型的变量的集合
  • 数组名:对于数组中的若干变量,可以用同一名称来命名
  • 下标:各变量在数组中的位置,可以用数组来表示
  • 数组元素(下标变量):有了数组名和下标,就可以唯一的表示数组中的某个变量
2、数组的特点
  • 确定性:数组一旦定义,其长度就确定下来,所包含的元素不可更改
  • 同质性:数组中的元素可以是任意数据类型,但数组中的所有元素只能是同一种数据类型,不能出现混合类型
  • 有序性:数组中的各元素是有先后顺序的,元素的下标即表示它在数组中的位置,且数组中的所有元素在内存中按照这个先后顺序连续存放在一起
3、数组的使用场合

当需要多个数据而不想定义过多变量时,可以使用数组来解决问题;通过数组名和下标引用一系列的变量

二、一维数组

一维数组是最简单的一种类型,数组在使用前必须先进行定义

1、一维数组的定义
  • 一维数组的定义方式: 类型说明符 数组名[常量表达式];

    • 类型说明符 可以是任一一种数据类型,表示该数组的所有元素的都是该类型;

    • 数组名 是用户自定义的数组标识符,其命名规则和定义变量名一样,应符合标识的命名规则;

    • 常量表达式 表示数组的长度,即该数组包含元素的个数。例如:

      int num[500];

  • 注意:

    • 数组名不能与现有的变量名重复
    • 方括号中的常量表达式表示数组元素的个数
    • 常量表达式中不能包含变量、其值必须是大于0的正整数
    • 若数组初始化,则常量表达式可以省略
2、一维数组的初始化

除了赋值语句依次对各元素进行赋值以外,为了提高程序的运行效率,可以在定义数组的同时给数组元素赋初值,即数组的初始化

  • 初始化的一般形式 :类型说明符 数组名[常量表达式]={值1 ,值2, …, 值n};

    • 其中:花括号的数值是依次赋给数组中的每一个元素,各数值用逗号隔开
    • 可分为完全初始化和不完全初始化
      • 完全初始化:int arr[10]= { 1,2,3,4,5,6,7,8,9,10 }
      • 不完全初始化:int arr[10]= { 1,2,3,4,5} 余下的以0填入。
  • 注意:

    • 花括号里的值的个数不应该超过数组的长度
    • 在定义数组的同时使用上述初始化方法方可
    • 对数组中的部分元素赋初值:当值的个数小于数组元素的个数,这些值将依次赋给数组中的前若干个元素,剩下的元素赋值为0
3、一维数组元素的引用

数组本质上是一组变量的集合,在使用数组时不能将数组作为一个整体来进行引用,只能对数组中的任意元素进行引用

  • 引用数组元素的一般形式:数组名[下标];
    • 数组名必须是已经定义过的数组;
    • 下标可以是常量、变量或表达式,但其值必须是整型,且下标的范围是0~n-1(n为已定义数组的长度)。例如:
int num[500];
int total;
……
total=num[100]+num[200];

其中,num[500]表示num数组包含500个元素;而num[100]和num[200]分别表示数组num中的第101和第201个元素(起始下标为0),并且都为一个整数值。

4、一维数组的一些
  • 计算数组的大小:数组的大小可以通过计算得到。例如:

    int sz = sizeof(arr)/sizeof(arr[0]);

  • 一维数组在内存中的存储

  • 可知:

    • 一维数组在内存中是连续存放的;
    • 随着数组下标的增长,地址是由低向高变化的。
  • 数组名是什么?

    • 数组名是数组首元素的地址。

- 但是又两个例外:
  - sizeof(数组名) -- 数组名表示整个数组 -- 计算的是整个数组的大小,单位是字节
  - &数组名 -- 数组名表示整个数组 -- 取出的是整个数组的地址
三、二维数组 1、二维数组的定义

如果一个数组的每个元素也是数组类型,那么这个数组就是多维数组。

当数组元素为一维数组时,该数组即二维数组。

  • 二维数组的一般形式:类型说明符 数组名[常量表达式1][常量表达式2];

    • 常量表达式1和常量表达式2分别用来表示数组的第一维和第二维的长度
  • 为了更好的理解二维数组,可以把一个二维数组a[m][n]看作一个m行n列的矩阵,即将二维数组写成行列组合的形式

例如:

数组:a[3][3]可以看作一个3*3的矩阵:
a[0][0]  a[0][1]  a[0][2]
a[1][0]  a[1][1]  a[1][2]
a[2][0]  a[2][1]  a[2][2]
2、二维数组元素的引用

使用二维数组时不能将其作为一个整体进行引用,只能对数组中的任意元素进行引用;

  • 引用二维数组的一般形式:数组名[下标1][下标2];

引用二维数组元素和定义数组的形式相似,但其表达的含义不同。

3、二维数组的初始化
  • 初始化的一般格式:

类型说明符 数组名[常量表达式1][常量表达式2] = {{值 0 0, …, 值0 n-1},{值1 0, …, 值1 n-1}, …, {值m-1 0, …, 值m-1 n-1}};

例如:

注意:

  • 内层花括号的个数对应数组第一维的长度即行数,内层花括号的值的个数对应数组第二维的长度即列数,二者都不能超过上限
  • 如果初始化时给出了所有数组元素的值,则可以省略内层的花括号
  • 二维数组初始化后,可以省略行,但不能省略列:arr[][4] = {{ 1,2 },{ 3,4 }};
  • 对数组中的部分元素赋初值:
    • 值的个数小于数组元素的个数,这些值将依次赋给数组中的前若干元素,对于剩余元素,将赋值为0
4、二维数组在内存中的存储
  • 二维数组在内存中的存储

  • 可知:

    • 二维数组在内存中是连续存放的——每一行内部是连续的,换行也是连续的(这也是为什么列不能省略)
四、字符数组

用来专门存放字符的数组称为字符数组

1、字符数组的定义
  • 字符数组的定义: char 数组名[常量表达式];
    • char表示:该数组的所有元素都是字符类型
    • 数组名是用户自定义的数组标识符
    • 常量表达式用来表示数组的长度
2、字符数组元素的引用

与一维数组元素的引用类似

3、字符数组的赋值

形式与一维数组类似

  • 注意:
    • 空格’ '也是一个字符
    • 当花括号中字符的个数超出数组长度,系统显示内存溢出
    • 花括号中字符的个数小于数组长度,这些字符依次赋给数组中的前若干个元素,对于剩余元素,系统自动赋为空字符(‘’)
    • 二维字符数组的赋值方法和数值型数组类似
4、字符串

在C语言中,没有专门的字符串变量,但可以将字符串作为字符数组来处理,即用一个字符数组来存放一个字符串。例如:

char a[10]={"hello"};
char a[10]="hello";

以上两种写法完全等价;此外用字符串进行赋值时也可以不指定字符数组的长度。例如:char a[]="hello"

注意:

  • 采用字符串赋值得到的数组a比采用单个字符逐个赋值得到的数组a的长度多1个字节,最后会添加一个空字符(‘’)来 作为结束标志
    • char a[10]="Hello!";会丢失’!',需要特别注意
5、字符数组的输入输出

单个字符的输入输出通过格式符 “%c”,字符串的输入输出通过格式符 “%s”;

***例五:***输入一个字符串并原样输出

#include 
void main()
{
    char c[15];
    printf("请输入一个长度不超过15的字符串:n");
    scanf("%sn", c);
    printf("输入的字符串是:%sn", c);
}

对于上述注意事项:

  • 对于一个字符数组,如果不做初始化赋值,则必须在定义时指明数组的长度
  • scanf()函数的各输入项前必须有地址符”&“,C语言规定,字符数组名即代表了该数组的首元素的地址,因此在字符数组名c前面不能加地址符”&“
  • 当用scanf()函数输入字符串时,由于scanf()函数将空格解释为多个输入变量的分隔符,所以字符串中不能含有空格,否则将以空格作为字符串的结束符
五、指针数组

在指针章节详解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号