C语言数组(1)
C语言数组(一)
一维数组定义
举例1.
一维数组的初始化
二维数组定义
设有整型二维数组a[3][4]定义为int a[3][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。
a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于1000。a+1代表第一行的首地址,等于1008。
a[0]是第一个一维数组的数组名和首地址,因此也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],&a[0][0]是相等的。
a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],&a[1][0]是等同的。
此外,&a[i]和a[i]也是等同的,在二维数组中不能把&a[i]理解为元素a[i]的地址,因为元素a[i]是不存在的。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。
由此,我们得出:a[i],&a[i],a+i, &a[i][0]也都是等同的。
另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。
字符数组定义
字符数组的输入输出:单个输出(%c)和将整个数组作为字符串输出(%s)
字符串
(a).puts(字符数组名) 将字符串输出到终端
(b).gets(字符数组) 从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址
(c).strcat(字符数组1, 字符数组2) 连接两个字符数组中的字符串,把字符数组2接到字符数组1的后面,结果放在字符数组1中,函数调用后得到一个函数值--字符数组1的地址。
注意:字符数组1必须足够大,以便容纳连接后的新字符串
(d).strcpy(字符数组1, 字符数组2) 将字符数组2复制到字符数组1中去。
注意:字符数组1要足够大,以便容纳复制后的值;字符数组1必须写成数组名,字符数组2可以是数组名也可以是字符串常量;不能使用=赋值,只能使用strcpy。
(e).strcmp(字符串1, 字符串2)
字符串比较,字符串1 == 字符串2返回0; 字符串1 > 字符串2返回正整数;字符串1 < 字符串2返回负整数
(f).strlen(字符数组)
测试字符数组或字符串常量的长度
(g).strlwr(字符串)
将字符串大写字母转换成小写字母
(h).strupr(字符串).
将字符串小写字母转换成大写字母
一维数组定义
类型说明符 数组名 [常量表达式]
举例1.
#include<stdio.h> main(){ int arr[10] ; for (int j = 0 ; j < 10 ; j++) { arr[j] = j; } for (int i = 0 ; i < 10 ; i++) { printf("The %d number is %d .\n", i, arr[i]); } }
一维数组的初始化
(a).定义数组元素时初始化 int arr [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; (b).只给一部分元素赋值 int arr[10] = {1, 2, 3, 4, 5, 6}; (c).数组所有元素值相同 int arr[10] = {1}; (d).全部元素均赋初值时可以不指定数组长度 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
二维数组定义
类型说明符 数组名[常量表达式][常量表达式]
设有整型二维数组a[3][4]定义为int a[3][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。
a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于1000。a+1代表第一行的首地址,等于1008。
a[0]是第一个一维数组的数组名和首地址,因此也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],&a[0][0]是相等的。
a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],&a[1][0]是等同的。
此外,&a[i]和a[i]也是等同的,在二维数组中不能把&a[i]理解为元素a[i]的地址,因为元素a[i]是不存在的。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。
由此,我们得出:a[i],&a[i],a+i, &a[i][0]也都是等同的。
另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。
#include<stdio.h> main(){ int a[3][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}}; for (int i = 0 ; i < 3 ; i++) { for (int j = 0 ; j < 4 ; j++) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); } } }
字符数组定义
char arr[5] = {'a', 'b', 'c', 'd', 'e'}; char arr2[5] = {"abcde"};
字符数组的输入输出:单个输出(%c)和将整个数组作为字符串输出(%s)
#include<stdio.h> main(){ char arr[5] = {'a', 'c', 'd', 'e', 'f'}; for (int j = 0 ; j < 5 ; j++){ printf("%c ", arr[j]); } printf("\n"); printf("%s\n", arr) ;//会出现个乱码 char arr2[] = {"abcde"}; printf("%s\n", arr2); /** a c d e f acdef烫汤. //乱码出现于此 abcde */ }
字符串
(a).puts(字符数组名) 将字符串输出到终端
#include<stdio.h> main(){ char arr[5] = {'a', 'c', 'd', 'e', 'f'}; char arr2[5] = {"acde"}; //若为acdef则提示错误,char arr2[] = {"acdef"};正常 printf("%s\n", arr); //此种输出会出现乱码 printf("%s\n", arr2); //正常 puts(arr); puts(arr2); }
(b).gets(字符数组) 从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址
#include<stdio.h> main(){ char arr2[10] ; //必须指定长度,若超过数组长度则弹出报错窗口 printf("请输入字符串:"); gets(arr2); printf("您刚才的输入为:"); puts(arr2); /** 请输入字符串:HelloWorld 您刚才的输入为:HelloWorld */ }
(c).strcat(字符数组1, 字符数组2) 连接两个字符数组中的字符串,把字符数组2接到字符数组1的后面,结果放在字符数组1中,函数调用后得到一个函数值--字符数组1的地址。
注意:字符数组1必须足够大,以便容纳连接后的新字符串
#include<stdio.h> #include<string.h> main(){ char arr1[10] ; //必须指定长度,若超过数组长度则弹出报错窗口 char arr2[5]; printf("请输入字符数组1:"); gets(arr1); printf("请输入字符数组2:"); gets(arr2); printf("%s\n", strcat(arr1, arr2)); puts(arr1); puts(arr2); /** 请输入字符数组1:hello 请输入字符数组2:world helloworld helloworld world */ }
(d).strcpy(字符数组1, 字符数组2) 将字符数组2复制到字符数组1中去。
注意:字符数组1要足够大,以便容纳复制后的值;字符数组1必须写成数组名,字符数组2可以是数组名也可以是字符串常量;不能使用=赋值,只能使用strcpy。
#include<stdio.h> #include<string.h> main(){ char arr1[10] ; //必须指定长度,若超过数组长度则弹出报错窗口 char arr2[10]; char arr3[10]; printf("请输入字符串数组1:"); gets(arr1); strcpy(arr2, arr1); puts(arr1); puts(arr2); printf("%s\n", strcpy(arr3, "China")); /** 请输入字符串数组1:hello hello hello China */ }
(e).strcmp(字符串1, 字符串2)
字符串比较,字符串1 == 字符串2返回0; 字符串1 > 字符串2返回正整数;字符串1 < 字符串2返回负整数
(f).strlen(字符数组)
测试字符数组或字符串常量的长度
(g).strlwr(字符串)
将字符串大写字母转换成小写字母
(h).strupr(字符串).
将字符串小写字母转换成大写字母
<<To Be Continued>>