c语言数组 | 您所在的位置:网站首页 › 定义一个空的字符数组怎么表示出来 › c语言数组 |
数组
1.数组的基本用法
1.1概念
数组是有序的元素序列。 将若干个类型相同的变量的集合命名,那么这个名称就是数组名。 重点是:数据类型相同并且连续的变量的集合。 1.2 定义格式存储类型 数据类型 数组名[元素个数]; 例如:(auto) int a[5]; 数组名:代表数组的首地址,a是地址常量,不能为左值,不能被赋值。 数组定义方法: (1)数组名定义规则跟变量名相同,遵循标识符命名规则。 (2)数组名后使用方括号括起来的表达式常量,表示元素的个数。 (3)常量表达式中可以包含常量和符号常量,不能包含变量。 1.3 访问元素数组名[下标]; 注意:下标从0开始 例如: 访问第一个元素: a[0]; 访问第n个元素: a[n-1]; 特点: 数据类型相同 在内存中连续 注意: (1)数组的数据类型就是其元素的数据类型 (2)数组名要符合标识符命名规则 (3)在同一个函数中,数组名不要与变量名相同。 例如:int a[5]; int a;//错误 (4)数组下标从0开始,到n-1结束。 2.一维数组一维数组、二维数组 2.1 一维数组的概念是有一个下标的数组 格式:存储类型 数据类型 数组名[元素个数]; 访问元素: 数组名[下标]; 下标从0开始 数组名:数组的首地址 2.2 初始化【1】定义时全部初始化 int a[5]={1,2,3,4,5}; printf(“%d\n”,a[0]); printf(“%d\n”,a[1]); printf(“%d\n”,a[2]); printf(“%d\n”,a[3]); printf(“%d\n”,a[4]); 【2】定义时部分初始化: 未初始化元素值为0 int a[5]={1,2}; printf(“%d\n”,a[0]); printf(“%d\n”,a[1]); printf(“%d\n”,a[2]); printf(“%d\n”,a[3]); printf(“%d\n”,a[4]); 【3】先定义,后初始化。需要单独对每个元素赋值。 int a[5]; a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; printf(“%d\n”,a[0]); printf(“%d\n”,a[1]); printf(“%d\n”,a[2]); printf(“%d\n”,a[3]); printf(“%d\n”,a[4]); 注意定义时不能数组越界: int a[3]={6,2,3,5,1}; //错误,数组越界 2.3 定义空数组【1】 int a[5]={0,0,0,0,0}; 【2】int a[5]={0}; 【3】int a[5]={}; 2.4 数组引用(1)先定义后引用 (2)每次只能引用一个数组元素a[i], 如果想引用所有元素可以通过循环遍历数组。 (3)引用时防止数组越界 (4)打印数组元素地址用%p的格式 例如: int a[10]; printf(“%p”,a); printf(“%d”,a); //错误,数组名是数组的首地址。 如果想遍历数组可以通过循环: #include int main(int argc, char const *argv[]) { int a[5]={1,2,3,4,5}; for(int i=0;i}; for(int i=0;i1, 1}; for (int i = 2; i int a[10] = {1, 2, 3}; for (int i = 0; i 1, 2, 3}; for (int i = 0; i }; int sum = 0; gets(s); for (int i = 0; i char s[32] = {}; int sum = 0; gets(s); int i=0; while (s[i]!='\0') { if(s[i] == ' ') sum++; i++; } printf("%d\n", sum); return 0; } 3.2.2 输出(1)用printf(): char s[32]=“hello”; printf(“%s”,s); (2)for循环 for(int i=0;i char s[32]={}; int len=0; scanf("%[^\n]",s); len=strlen(s); for(int i=0;i{1,2,3},{4,5,6}}//按行赋值 【2】部分初始化 未初始化的元素值为0 int a[2][3]={1,2,3,4,}; //顺序赋值 1 2 3 4 0 0 int b[2][3]={{1,2},{4,5}//按行赋值 1 2 0 4 5 0 【3】未初始化 随机值,需要单独赋值。 4.6 遍历二维数组for循环嵌套,外层行数,内层列数。 int a[n][m]={}; for(int i=0;i //scanf()/printf() } } 练习:设一个二维数组,每个数等于行和列数的乘积。 #include int a[3][3]={0}; int main(int argc, char const *argv[]) { for(int i=0;i a[i][j]=i*j; printf("%d ",a[i][j]); } printf("\n"); } return 0; }输出结果: a[0][0]=0; a[0][1]=0;a[0][2]=0 a[1][0]=0; a[1][1]=1;a[1][2]=2 a[2][0]=0; a[2][1]=2;a[]2[2]=4 4.7 内存分配int a[2][3]; (1)行地址 1.在二维数组中,数组名a的值,表示的实际含义是第一行首地址。这个数值还等于整个数组的首地址,还等于第一个元素的地址(&a[0][0])。 2.a+1代表第二的首地址。这个数值还等于第二行第一个元素的地址(&a[1][0])。 (2)列地址 1.二维数组中,a[0]的值是第一行第一列的地址,也就是该数组中首个元素的地址(&a[0][0]) 2.a[0]+1的值,是数组元素第一行第二列的地址(&a[0][1]) int a[2][3]={1,2,3,4,5,6}; printf(“%p %p\n”,a,a+1); printf(“%p %p\n”,a[0],a[1]); printf(“%p %p\n”,&a[0][0],&a[1][0]); printf(“%p %p\n”,a[0]+1,a[1]+1); printf(“%p %p\n”,&a[0][1],&a[1][1]); 打印结果: 0xbf858184 0xbf858190 0xbf858184 0xbf858190 0xbf858184 0xbf858190 0xbf858188 0xbf858194 0xbf858188 0xbf858194 |
CopyRight 2018-2019 实验室设备网 版权所有 |