主页 分类 关于

C语 数组

C语学习笔记

一维数组

一维数组的定义:


储存类型 数据类型 数组名 [ 常量表达式 ] = { 初始值 }

数组定义格式:

  • 储存类型是任意项, 可以是 auto, static, extern 储存类型, 但没有 register 型
  • 数据类型可以是 int, float, char
  • 数据名符号标识符定义, 但不能与其它变量同名
  • 数组元素的下标是从0开始编号的, 否则会产生数组越界
  • 常量表达式中可以包含常量和符号, 不能包含变量

一维数组的赋值例子:

int class[5] = {90,80,88,77,66}// 全部赋初值
int class[5] = {90,80,88}// 部分赋初值, 未赋值的元素默认为0
int class[ ] = {90,80,88,77,66}// 元素个数5 省略长度赋初值, 数组的长度(数组的元素个数) 根据赋初值的数决定

// 初值的个数不能超过长度

一维数组的储存例子:

# define SIZE 5 // 定义5个数
int main(void)
{
int a0,a1,a2,a3,a4;
int sdq[SIZE]; // int是4个字节 5个数相当于 4*5
printf("%d\n",sizeof(a0)); // 输出4个字节
printf("总字节数: %d\n",sizeof(sdq)); // 输出20个字节 int有4字节, 有5个数 4*5=20

// 数组长度 = 总字节数 / sizeof(类型)
printf("长度: %d\n",sizeof(sdq) / sizeof(int)); // int = a0
printf("长度: %d\n",sizeof(sdq) / sizeof(a0)); // a0 = int

// 总字节数 = sizeof(数组类型) * 数组个数(长度)
return 0;
}

一维数组元素的引用

  • 数组元素的实质为该数组所属数据类型的一个具有下标的变量, 故又称下标变量, 因此, 数组元素与具有相同数据类型的普通变量的引用完全相同
  • 如果数组int arr[N]; 则数组的下标为: 0 ~ N-1 即最大的下标为数组长度-1

数组元素的引用形式:


数组名 [ 下标 ]

一维数组元素的初始化

  • 注意: [ ]中括号不能省略
  • 可以对数组全部元素赋值
  • 也可以对部分元素赋初值

数组类型 数组名 [ 数组元素个数 ] = { 值1, 值 2, ..., 值 n }; 

一维数组的遍历例子:


# define N 4 // 定义4个数

int main(void)
{
int a[M] = { 10,20,30 }; //定义数组长度为3的一维数组

// 定义一个3行4列的二维数组 相当于3个数组长度为4的一维数组
int b[M][N] = {{ 1,2,3,4 }, { 0 }, { 6,7,8,9 }};
int i = 0;
for(i=0;i<M;i++)
{
printf("%d\n",a[i]);
}
return 0;
}

二维数组


二维数组的定义:


储存类型 数据类型 数组名 [ 行 ] [ 列 ];

二维数组的储存例子:


# define M 3 // 定义3个数

# define N 4 // 定义4个数

int main(void)
{
int a[M]; // 定义长度为3的一维数组

// 相当于3个数组长度为4的一维数组
int sdq[M][N]; // 定义3行4列的二维数组 M行 N列
printf("总字节数: %d\n",sizeof(sdq));

// 总字节数 = sizeof(数组类型) * 行数 * 列数

// a[i][j]在数组中的位置的公式: i * 总列数 * j
// 例如 a[1][2] 相当于 1 * 4 + 2 = 6
return 0;
}

二维数组的初始化


二维数组的初始化:

// 按行全部赋初值
int a[2][3] = {{ 10,20,30 },{ 40,50,60 }};

// 按储存顺序全部赋初值
int a[2][3] = { 100,200,300,400,500,600 };

// 部分赋初值 (按存储顺序) 未赋值的元素均为零
int a[2][3] = { 10,20,40 };

// 部分赋初值 (按行)
int a[2][3] = {{ 10,20 },{ 40 }};

// 省略行数赋初值
int a[ ][3] = {{ 1,2,3 },{ 4,5,6 },{ 7,0,0 }};
int a[ ][3] = { 10,20,30,40,50,60,70 };

一维数组的遍历例子:


# define M 3 // 定义3个数

# define N 4 // 定义4个数

int main(void)
{
int arr[M][N] = {{ 1,4,7,10 }, {2,5,8,11}, { 3,6,9,12 }}}; //定义3行4列的二维数组
int i = 0;
int j = 0;
for(i=0;i<M;i++) // 行下标遍历
{
for(j=0;j<N;j++) // 列下标遍历
{
printf("%d\t",a[i][j]);
}
printf("\n")
}
return 0;
}

二维数组元素的引用

  • 不论是一维数组还是二维数组, 都不能对数组进行整体引用, 只能对具体的元素进行访问
  • 在数组元素引用要特别注意下标越界, 因为系统不检查下标越界问题, 所以程序设计者要特别注意

数组元素的引用形式:


数组名 [ 下标 1 ] [ 下标 2 ]

二维数组元素的初始化

  • 对数组全部元素赋值, 这时允许二维数组定义中缺省行下标, 但不能缺省列下标
  • 也可以对部分元素赋初值

字符数组

字符数组的定义

一维数组的定义形式:


储存类型 char 数组名 [ 常量表达式 ] = { 初始值 };

二维数组的定义形式:


储存类型 char 数组名 [ 常量表达式 e1 ] [ 常量表达式 e2 ] = { 初始值 };

字符数组元素的初始化

  • 定义数组同时又可以缺省数组定义的长度, 对于二维数组, 可以缺省行下标, 但不能省列下标
  • 可以用字符串常量初始化数组: 该初始化法自动在末尾一个字符后加 ‘ \0 ‘作为结束符, 用字符串常量方式赋值比用字符常量赋值方式每行要多占一个字节
  • 在初始化中, 如果提供的字符个数多余数组元素的个数, 则作为语法错误处理, 如果字符个数小于元素个数, 则多余的数组元素自动赋空格字符

字符串处理函数

字符串输出函数 puts

  • 功能: 将一个字符串 ( 以 ‘ \0 ‘ 结束的字符序列 ) 输出到终端 用 puts 函数输出的字符串中可以包含转义字符

字符串输出函数 puts的格式:


puts (字符串数组名);

字符串输入函数 gets

  • 功能: 从键盘输入一个字符串到字符数组, 并且得到一个函数值, 该函数数值是字符数组的起始地址

字符串输出函数 puts的格式:


gets (字符串数组名);

字符串连接函数 strcat

  • 功能: 把字符数组 2 中的字符串接到字符数组 1中的字符串后面, 结果放在字符数组 1 中, 并取消字符数组 1 中的 ‘ \0 ‘, 函数调用后得到的返回值为字符数组 1 的首地址

字符串输出函数 puts的格式:


strcat ( 字符数组 1, 字符数组 2 );

字符串复制函数 strcpy

  • 功能: 把字符数组 2 复制到字符数组 1 中去, 串结束符 ‘ \0 ‘ 也一同复制, 字符数组 2 可以为字符串常量, 使用时要注意

    1. 字符数组 1 必须定义得足够大, 以便能存放被复制的字符串, 字符数组 2 的长度

    2. “ 字符数组 1 “ 必须写成数组名形式, 不能为字符串常量

    3. 不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组

  • 使用时, 字符数组 1 必须足够大, 以便容纳连接后的新字符串

字符串输出函数 puts的格式:


strcpy ( 字符串数组 1 , 字符数组 2 );

字符串比较函数 strcmp

  • 功能: 按照 ASCII 码顺序比较两个字符数组中的字符串, 由函数返回值可以比较结果, 也可以用于比较两个字符串常量或数组与字符串常量

比较结果:

  • 字符串 1 == 字符串 2, 函数值为0
  • 字符串 1 > 字符串 2, 函数值为正整数
  • 字符串 1 < 字符串 2, 函数值为负整数

字符串输出函数 puts的格式:


strcmp ( 字符数组 1 , 字符数组 2 );

检测字符串长度函数 strlen

  • 功能: 该函数值为字符串实际长度, 即字符串中不包含 ‘ \0 ‘在内的字符个数

字符串输出函数 puts的格式:


strlen ( 字符数组 );

大写字母转换为小写字母函数 strlwr

  • 功能: 将字符串中大写字母转换成小写字母

字符串输出函数 puts的格式:


strlwr ( 字符数组 );

小写字母转换为大写字母 strupr

  • 功能: 将字符串中小写字母转换成大写字母

字符串输出函数 puts的格式:


strupr ( 字符数组 );









作者: 我叫史迪奇
本文来自于: https://sdq3.link/C-Array.html博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议