006-数组
数组
数组故名思议就是一组数据的集合。
int a[10];//可以存储10个整数
char c[8];//可以存储8个字符‘
一般格式:数组类型 数组名[元素个数];
数组元素的访问:下标,a[2],a[0],a[4];//下标是从0开始的
下面是示例
1 #include<stdio.h> 2 3 4 5 //数组作为函数参数 6 void show(int a[],int n); 7 //逆序输出数组 8 void reverseArray(int a[],int n); 9 //输出最大值 10 int returnMax(int a[],int n ); 11 //求数组元素的和 12 int returnSum(int a[],int n); 13 int main() 14 { 15 int a[3];//定义 16 int nArray[] = {0,1,2,3,4,5,6,7,8,9};//定义并初始化 17 18 printf("%lu\n",sizeof(a));//数组的大小 = 数组类型*元素个数 19 20 //逐个赋值 21 a[0] = 11; 22 a[1] = 22; 23 a[2] = 33; 24 25 //数组的使用,注意数组越界问题 26 int arrayLenght = sizeof(nArray)/sizeof(int); 27 int i = 0; 28 while( i ++ < arrayLenght)//while循环实现遍历 29 { 30 printf("%d ",nArray[i]); 31 } 32 printf("\n"); 33 show(a,3); 34 reverseArray(a,3); 35 printf("max :%d\n",returnMax(a,3)); 36 printf("sum:%d\n",returnSum(a,3)); 37 38 return 0; 39 } 40 //数组作为函数参数,在形参列表中,int a[10] 实际意义是int *a; 41 void show(int a[],int n)//a是数组,n是元素个数 42 { 43 //不要再函数中对函数参数数组进行sizeof,因为,数组再函数参数中传递的实际是一个指针,即数组的首地址 44 // sizeof on array function parameter will return sizeof 'int *' instead of 'int []' 45 //printf("函数参数:%lu\n",sizeof(a));//数组的大小 = 数组类型*元素个数 46 for (int i = 0; i < n; i ++)//for循环实现遍历 47 { 48 printf("%d ",a[i]); 49 } 50 printf("\n"); 51 } 52 53 //逆序输出数组 54 void reverseArray(int a[],int n) 55 { 56 while (n-- > 0 ) { 57 printf("%d ",a[n]); 58 } 59 printf("\n"); 60 } 61 62 //输出最大值 63 int returnMax(int a[],int n ) 64 { 65 int max = 0; 66 for (int i = 0; i < n; i ++)//for循环实现遍历 67 { 68 if (max < a[i]) 69 { 70 max = a[i];//取得最大值 71 } 72 } 73 return max; 74 } 75 //求数组元素的和 76 int returnSum(int a[],int n) 77 { 78 int sum = 0; 79 for (int i = 0; i < n; i ++)//for循环实现遍历 80 { 81 sum += a[i];//累计求和 82 } 83 return sum; 84 }
二维数组以及多维数组
二位数组是一种特殊的一维数组:它的元素是一维数组。
二位数组就相当于一个表格,有行有列。
int a[3][2];//两行三列,如下图所示
a[0][0] a[0][1]
a[1][0] a[1][2]
a[2][0] a[2][2]
下标也是从零开始,数组名就是数组的地址,也就是第一个元素的地址a[0][0]
可以理解为三个一维数组:a[0],a[1],a[2].
其中a[0] 包括a[0][0],a[0][1],
a[1] 包括a[1][0],a[1][1],
a[2] 包括a[2][0],a[2][1]
二维数组示例
1 #include <stdio.h> 2 3 //二维数组练习 4 5 void show(int a[][2],int h,int l); 6 int main() 7 { 8 9 //定义 10 int a[3][2]; 11 //for循环初始化 12 for (int i= 0; i < 3; i++) 13 { 14 for (int j = 0; j< 2; j ++) 15 { 16 a[i][j] = i+j; 17 } 18 } 19 printf("length: %lu\n",sizeof(a)); 20 //数组存储顺序,先行后列 21 printf("数组存储顺序\na[0]: %p\n",&a[0]); 22 printf("a[1]: %p\n",&a[1]); 23 printf("a[2]: %p\n",&a[2]); 24 show(a,3,2); 25 26 return 0; 27 } 28 29 void show(int a[][2],int h,int l) 30 { 31 //数组名也是当做一个指针传进来的,int (*)[2]; 32 //sizeof on array function parameter will return size of 'int (*)[2]' instead of 'int [3][2]' 33 // printf("%lu\n",sizeof(a)); 34 35 //遍历数组,循环嵌套 36 for (int i= 0; i < h; i++) 37 { 38 for (int j = 0; j< l; j ++) 39 { 40 printf("%p\t",&a[i][j]);//数组存储顺序,先行后列 41 //printf("%d ",a[i][j]); 42 } 43 printf("\n"); 44 45 } 46 printf("\n"); 47 48 }
字符串
"hello" //这就是一个字符串,由多个字符组成,以字符\0结束,\0字符不可见。
字符串输出时用 %s。
字符串的长度:strlen函数获取字符处的长度,不包括\0字符
1 #include <stdio.h> 2 #include <string.h>//strlen 函数头文件 3 4 //是否包含字符c,有得话返回,否则返回1 5 char containC(char str[],int n); 6 7 //字符串 8 int main() 9 { 10 char c1[] = "jkhasdjkfhnkcdfdf";//系统自动添加结束字符 \0 11 char c2[] = {'1','2','3','\0'};//这样赋值的话,要自己加上结束字符 \0 12 printf("%s\t %s\n",c1,c2); 13 printf("%lu\t %lu\n",strlen(c1),sizeof(c1));//strlen获得字符串长度,不包括\0 14 15 printf("%c\n",containC(c1,strlen(c1))); 16 17 return 0; 18 } 19 20 //是否包含字符c,有得话返回,否则返回1 21 char containC(char str[],int n) 22 { 23 //循环遍历字符串 24 for (int i = 0; i < n ; i ++) 25 { 26 if (str[i] == 'c') 27 { 28 return '1';//找到返回1 29 } 30 } 31 return '0';//找不到返回0 32 }