栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言数组

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

C语言数组

目录

1.1 总概念:

1.2 总特点:

1.3 注意事项:

1.4 一维数组(数字型):

1.4.1 初始化:

 1.4.2 字节:数组大小是多少个字节?

1.5 一维字符数组(字符型) :

1.5.1 概念:

1.5.2 初始化:

1.5.3 输入和输出:

1.6 二维数组(数字型) :

1.6.1 理解:

1.6.2 定义:

1.6.3 初始化:

1.6.4 输入和输出:

1.7 二维字符数组(字符型):

1.7.1 定义:

 1.7.2 输出和输入:

 1.8 数组元素的插入和删除:

1.9 二维数组的实质(以字符型重点补充,数字型可以码农友们自行尝试):


1.1 总概念:

数组是用于处理大批量数据的一种构造数据类型,其属于线性结构中的顺序存储结构。

1.2 总特点:
  • 数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。
  • 用一个数组名和下标来唯一地标识数组中的每个元素。
  • 数组中的每一个元素都是属于同一数据类型。(规定不能把不同数据类型的数据放在同一个数组中。)
  • int age[10]; 
    //定义了一个int整型数组,数组名为age,大小为10,用于存储10整型数据

1.3 注意事项:
  • 数组名需要符合标识符的命名规则!!!
  • 定义数组时给定的数组大小必须是一个整型常量表达式!!!
  • 数组大小不允许为小数!!!
  • 定义数组时必须给定数组大小,除非有初始化赋值!!!

1.4 一维数组(数字型):

1.4.1 初始化:
  •  数组下标是从0开始
  • 数组最大元素下标是数组大小 - 1
  • int score1[100] = { 0 }; //将数组score1所有的元素初始化为0
  • int score2[100] = { 1 }; //将数组score2中第1个元素初始化为1,其他元素都为0
  • int score3[ ] = { 11, 22, 33, 44, 55 }; //给数组初始化赋值时也可以不给定数组大小数组 ,大小会根据你初始化赋值的数据的数量来给定数组大小
  • int score4[n]; //错误!!!数组大小必须是常量值,不能是变量
  • #include
    int main()
    {
    int arr[4]={ 1, 2, 3, 4 }; //数组大小为4
    //访问(下标是从0开始,定义的数组大小-1 结束)
    printf("%d",arr[0])//访问数组中第1个数
    printf("%d",arr[1])//访问数组中第2个数
    printf("%d",arr[2])//访问数组中第3个数
    printf("%d",arr[3])//访问数组中第4个数
    
    return 0;
    }
  • 注意事项:在不确定需要存储多少数据时,定义数组时尽可能在不浪费内存的情况下,给定大一点的数组大小,确保能够存下所有数据 

 1.4.2 字节:数组大小是多少个字节?

 数组字节大小 = 数组元素个数 *数组单个元素的字节大小


1.5 一维字符数组(字符型) :

1.5.1 概念:

char类型的数组,是一种特殊的数组。

1.5.2 初始化:
  • char str[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }
  • char str1[8] = "abcdefg";//(最多只能有7个有效字符)用字符串给字符数组初始化赋值,但注意str1[8]的字符串赋值时能输入的有效字符为7个,多写一个就会报错,其实字符串赋值时其最后一个字符会默认有个""!!!但也给字符数组初始化赋值时,只给部分数组元素赋初值,没有给完全,其他没有赋值的元素默认为'',字符''的ASCII码为0
  • str = str1; //错误(数组首地址之间不能相互赋值)!!!
  • str[0] = str1[0]; //正确(相同类型的数组元素之间可以相互赋值

1.5.3 输入和输出:
  • 输入:
  1. scanf("%s", str); //%s是字符串的格式占位符,不需要&取址符(注:以此输入字符串时,空格会被看做’’输入)
  2. gets(str); //gets为字符串的输入函数(注:以此输入字符串时,空格不会被看做’’输入)
  3. getchar(str[0]);//单个字符的输入
  • 输出:
  1. puts(str); //puts为字符串的输出函数; (注:puts(str)以''作为输出的结束标志,字符数组和字符串默认会以''作为结束标志,''会占用一个字节的存储空间,所以定义字符数组时需要多给它一个大小,用于存储'',要确保字符数组有足够的空间存储'')
  2. putchar(str[0]);//单个字符的输出

1.6 二维数组(数字型) :

1.6.1 理解:

相当于多个一维数组的组合

1.6.2 定义:

int arr[3][4]; 注意:二维数组的数组元素下标也是从0开始的

例:

arr[3](管行数) [4](管列数);

第一行第一列:arr[0][0],

第一行第三列:arr[0][2],

第二行第一列:arr[1][0];

第二行第三列:arr[1][2],

1.6.3 初始化:

int arr1[4][2] = { 11, 34, 23, 67, 55, 90, 123, 543 };       

  • 注:但若给二维数组前部分元素赋初值时,没有初始化赋值的元素默认为0               

int arr2[ ][4] = { { 1, 2, 3 }, { 5, 6 }, { 9 } }; //默认为arr2[3][4]

  • 注: 二维数组初始化赋值时可以省略行下标大小,但是必须给定列下标大小

1.6.4 输入和输出:
#include
int main()
{
int arr[3][4];  //定义了一个int整型二维数组,行数为3,列数为4
// 输入
for (int i = 0; i < 3; i++) //双重循环给二维数组输入数据
{
	for (int j = 0; j < 4; j++)
	{
		scanf("%d", &arr[i][j]);
	}
}

// 输出:
for (int i = 0; i < 3; i++)//双重循环输出二维数组的数据
{
	for (int j = 0; j < 4; j++) 
	{
		printf("%dt", arr[i][j]);
	}
	putchar('n');
}
return 0;
}

1.7 二维字符数组(字符型):

1.7.1 定义:

char str[4][10] = { "helloworld", "world", "!n", "C++" };

注:字符串总是以结束,一般的字符串处理函数都是以作为字符串结束标志

 1.7.2 输出和输入:
#include
int main()
{

char str[4][10]; //定义了一个cahr字符二维数组,行数为3,列数为10
// 输入:
for (int i = 0; i < 4; i++)
{
	gets(str[i]);  //二维数组带一个下标表示某一行的首地址,以回车为下一行的字符串输入
}
// 输出:
for (int i = 0; i < 4; i++)
{
	puts(str[i]);  //二维数组带一个下标表示某一行的首地址
}
return 0;
}

 1.8 数组元素的插入和删除:
  • 数组元素的插入( 向已部分初始化的数组的指定位置放入数据 ),例:
#include
int main()
{
int arr[9] = { 1, 2, 3, 4, 5, 6, 7, 8 };
//要求:把数据66放到数组的第6个元素的位置上
int i;
for (i = 8; i>5; i--)
{ //数组元素依次往后移动,直到i到达放入位置的下标
	arr[i] = arr1[i - 1];
}
arr[5] = 66; //将新插入的数据放入数组对应位置
return 0;
}
  • 数组元素的删除(把数组中指定位置上的数据从数组中移除),例:
#include
int main()
{
int arr[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//要求:将数组arr1中第4个数组元素删除
int i;
for (i=3; i < 8; i++)
{  //数组元素依次往前移动,i从需删除的位置的下标开始,直到最后
	arr[i] = arr1[i + 1];
}
return 0;
}

1.9 二维数组的实质(以字符型重点补充,数字型可以码农友们自行尝试):

二维数组看起来是以行列存储数据,其实本质上它只有一行,实质二维数组的存储空间是连续的 ,只因为系统定义其的二维访问方式使其成为二维数组,例:

#include
int main()
{
	char arr[3][6] = { "hello", "World", "!!!!!" };
	for (int i = 0; i < 18; i++) //输出arr[3][6]全部字符
	{
		printf("%c",arr[0][i]); //从首地址arr[0]开始访问到底,不需二重循环
	}

	return 0;
}

输出结果(可知可确):

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

版权所有 (c)2021-2022 wk8.com.cn

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