四、数组
1. 一维数组
概念:顾名思义,数组:数据的组合,数组元素的数据类型相同,内存连续。
定义:类型说明符 数组名[数组长度] = {存储的数据},例如:int arr[5] = {1,2,3,4,5}
注:类型说明符即 基本数据类型;
数组名必须是合法的标识符,满足规则和规范;
数组大小:是一个常量,或者是一个字符(ASCII码);
数组通过下标访问,下标从0开始,例如:arr[0],为1;
数据是占内存的,并且操作系统会随机分配内存地址编号;
地址:实际上是内存条上的东西,虚拟出来的一个地址,用来表示这个数据在内存条的位置。地址一般是用十六进制形式表示。
int arr1[]; //错误定义 int arr2[]={1,2,3,4,5}; //正确,初始化的元素个数即arr2数组大小 int arr3[10]={1,2,3}; //正确,输出1230000000 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; //正确 printf("%d\n", arr[4]); //5 scanf("%d",&arr[4]); //因为arr也是变量,所以可以改变,这里输入55 printf("%d\n", arr[4]); //打印数组数据 for(int i=0; i<10; i++) { printf("%d\n",arr[i]); } //打印内存地址,地址连续 for(int i=0; i<10; i++) printf("%p\n", &arr[i]);
2. 二维数组
概念
类似一维数组。
定义
类型说明符 数组名[行数组长度] [列数组长度] = {{存储的数据},{存储的数据}}
//例如,arr1和arr2存储方式相同,但为了好观察,一般采用arr1的方式。 //赋值是一行一行地赋值 int arr1[2][3]={{1,2,3},{3,2,1}}; int arr2[2][3]={1,2,3,3,2,1}; int arr3[2][3]={{1,2},{3,2}}; //没有赋值地地址赋值为0,即1,2,0,3,2,0 int arr4[][3]; //错误 int arr5[2][]; //错误 int arr6[][3]={ 1,2,3, //第一行123 3,2 //第二行320 }; //正确 //打印二维数组 for(int i=0; i<2; i++) { for(int j=0; j<3; j++) printf("%d\t",arr6[i][j]); }
3. 三维数组
由多个二维数组组成。
int arr1[2][4][3]; //2个二维数组,均为4行3列 //如何赋值嘞? int arr1[2][4][3] = { { {1,2,3}, {4,5,6}, {7,8,9}, {10} }, { {1,2,3}, {4,5,6}, {7,8,9}, //aar1[1][2][2]=9 {10} } }; //打印 for(int i=0; i<2; i++) { for(int j=0; j<4; j++) { for(int k=0; k<3; k++) printf("%d\t",arr1[i][j][k]); } }
4. 四维数组
与上面类似,由多个三维数组组成。
5. 字符数组
定义:存储字符类型数据地集合。
char str[10] ={0}; str[0] = 'a'; //赋值 str[1] = 'b'; for(int i=0; i<10; i++) printf("%c\n",str[i]); //打印 ab
注意:字符串和字符不一样
char str1[10] = "abcdefg"; printf("%s",str1); //字符串末尾有\0,指结束字符 char str2[10]; str2[0] = 'a'; //赋值 str2[1] = 'b'; //printf("%s",str2); //错误,数组结尾没有\0 str2[2] = '\0'; str2[3] = 'c'; printf("%s",str2); //正确,输出a,b,因为遇到结束符\0
注意输入字符串和输入数字地区别
scanf("%s", str); printf("%s",str); //或者用另一种方式 gets(str); puts(str);
中文也是字符,但是一个汉字占两个字节。
二维字符数组
char str[3][10]= { {"张三"}, {"李四"}, {"王二"} }; printf("%s",str[0]);//输出第一行 张三
五、 常用字符串函数
1. strcmp()
用于比较两个字符串str1,str2,比较完毕后返回一个结果
return 0,表示str1=str2,>0表示str1>str2, <0表示str1<str2.
char str1[10] = "aaaaa"; char str2[10] = "aaaaa"; printf("%d\n", strcmp(str1,str2));//需要头文件<string.h>
2. strlen()
求字符串地有效长度,\0不算有效长度,区别sizeof():求类型大小。
char str[10] = "aaa"; printf("%d\n",strlen(str));//3
3. strcat()
字符串拼接函数。拼接的时候str数组要留够足够的空间。
char str[10] = "aaaa"; char str2[10] = "bbb"; strcat(str, str2);//aaaabbb printf("%s", str);
4. strcpy()
字符串拷贝函数。
char str[10] = "aaa"; char str1[10] = "bbb"; strcpy(str,str1); printf("%s\n", str); //bbb