19-C语言中的数组知识汇总
扫描二维码
随时随地手机看文章
一、数组1.数组基础
数组是相同类型数据的集合,它们都拥有同一个名称。在大数量处理和字符串操作时,广泛使用数组。数组对C语言来说起着相当至关重要的作用。
定义一个数组,10个元素为int类型的数组
类型名(int[10]) + 变量名(arr)
2.数组完全初始化#includeint main(void) { int arr[5] = {1,2,3,4,5,}; printf("arr[2] = %d ", arr[2]); } root@ubuntu:/mnt/hgfs/SHARE/2# ./a.outarr[2] =33.数组遍历
数组下标越界,编译器不检查,提高效率
#includeint main (void) { int arr[5]={1,2,3,4,5}; int i =0;for(i; i<5; i++) { printf("arr[%d]= %d ", i, arr[i]); } } root@ubuntu:/mnt/hgfs/SHARE/2# ./a.outarr[0]=1arr[1]=2arr[2]=3arr[3]=4arr[4]=54.数组部分初始化intarr[5];intarr_[5] = {1};intarr_3[5] = {};intarr_4[5] = {[2]=100};5.数组格式intnum =0;scanf("%d",&num);intarr[num]={};//error: variable-sized object may not be iniTIalized不能初始化可变化大小的对象。//数组格式是常量,此时是变量6.左值和右值
左值代表的是内存空间,右值代表的是值(内存空间内容)
数组名作为右值,打印的是地址,数字首元素首地址
*i = arr+1 指向数组第二个元素
*i = &arr+1 指向整个数组之后的第一个元素
7.传值调用
函数调用只是传进去实参的变量名字
数组名作为参数时,丢失了数组本身的大小,退化成了一个指针
数组名作为参数,要加上自己的大小(个数)
二、数组的应用1.冒泡排序#includeintmain(void) {intarr[10];inTI =0, j =0, temp =0;printf("请输入10个数: ");for(i; i<10; i++) scanf("%d",arr+i);for(i=0; i<10; i++)printf("%2d",arr[i]);printf(" 排序后 ");for(i=0; i<9; i++) {for(j=0; j<9-i; j++) {if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }for(i=0; i<10; i++) {printf("%2d",arr[i]); }printf(" "); } root@ubuntu:/mnt/hgfs/SHARE/1# ./a.out请输入10个数:13582467031358246703排序后01233456782.选择排序#includeintmain(void) {intarr[10];inTI =0, j =0, temp;printf("请输入5个数: ");for(i=0; i<5; i++) scanf("%d",&arr[i]);for(i=0; i<5; i++)printf("%2d",arr[i]);printf(" 排序后 ");for(i=0; i<5; i++) {for(j=i+1; j<5; j++) {if(arr[i] for(i=0; i<5; i++) {printf("%2d",arr[i]); }printf(" "); } root@ubuntu:/mnt/hgfs/SHARE/1# ./a.out请输入5个数:5824658246排序后865423.进制转换#includeintfun(void) {chararr[100]={0}, i =0;inta =0, b =0;printf("请输入一个数:");scanf("%d",&a);printf("请输入转换的进制数:");scanf("%d",&b);do{ arr[i] = a % b; a = a / b; i++; }while(a >0);for(i=i-1; i>=0;i--) {if(arr[i] <10) {printf("%d",arr[i]); }else{printf("%c",arr[i]-10+'A'); } } }intmain(void) { fun(); } root@ubuntu:/mnt/hgfs/SHARE/1# ./a.out请输入一个数:666请输入转换的进制数:1629A