C语言数组类型、定义、初始化、遍历讲解
程序员文章站
2022-03-19 20:20:13
一、数组基础
1、数组的类型:
元素类型名[元素个数]
2、数组的定义:
元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr:
int...
一、数组基础
1、数组的类型:
元素类型名[元素个数]
2、数组的定义:
元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr:
int arr[10];//int为元素的类型,不是数组的类型,数组是int[10]类型的。
3、数组的初始化
数组的初始化分为完全初始化和部分初始化。
int arr[5] = {1, 2, 3, 4, 5};//完全初始化。 //完全初始化即为给数组的每个元素都赋值。 int arr2[5] = {1, 2}; //部分初始化。 //部分初始化为给数组的部分元素赋值,其余元素为随机值。 int arr3[5] = {}; //数组置零,即全部元素的值都为零。
4、数组遍历
编译器不会检查数组是否越界,可提高编译效率
数组遍历输入
void scfarr(int arr[], int len) { int i = 0; for(i=0; i 数组遍历输出void prtarr(int arr[], int len) { int i = 0; for(i=0; i5、数组名作为左值和右值 右值: 数组名arr作为右值代表第一个元素的首地址。 &arr代表数组的首地址,与arr数值相等,代表含义不同,(&arr+1)代表整个数组的后一项。 左值: 左值代表的是变量所对应的内存空间,数组作为一个整体,没有匹配的数值与其空间对应。 故数组不能作为左值,只能被初始化。6、传值调用 数组名作为参数,要加上元素个数。 数组名作为参数传递的是数组首元素首地址。 数组名作为参数时,丢失了数组本身的大小,退化成了一个指针 。 子函数对数组的操作会改变元素的值,但不会改变元素的地址,在子函数内改变的地址作为形参在子函数结束时被销毁。二、数组的应用1、冒泡排序;>void mppx(int arr[], int len) //arr为被排序的数组名,len为数组长度。 { int i = 0, j = 0, tem = 0; for(i=0; iarr[j+1]) { tem = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tem; } } } return; }2、选择排序
void xzpx(int arr[], int len) //arr为被排序的数组名,len为数组长度。 { int i = 0, j = 0, tem = 0; for(i=0; iarr[j]) { tem = arr[j]; arr[j] = arr[i]; arr[i] = tem; } } } return; }3、进制转换
int fun(void) { char arr[100]={0}, i = 0; int a = 0, b = 0; printf("输个数!\n"); scanf("%d",&a); printf("几进制?\n"); 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'); } }4、二分法查找数据的角标
#include int search_arr_element(int arr[], int left, int right, int data); void main(void) { int arr[5] = {1, 2, 3, 4, 5}; printf("%d\n",find_data(arr, arr[0], arr[4], 5)); return; } int find_data(int arr[], int left, int right, int data) { int mid = 0; while (left <= right) { mid = (left+right) / 2; if(data > arr[mid]) { left = mid + 1; } else if(data < arr[mid]) { right = mid - 1; } else { return mid; } } return -1; }5、循环右移
#include #include void right(char arr[], int wei); void main(void) { char arr[] = "qaujetg"; int a = 0; printf("几位?\n"); scanf("%d", &a); right(arr, a); printf("%s\n", arr); return; } void right(char arr[], int wei) { int i = 0, j = 0, tem = 0, len = strlen(arr); for(i=0; i0; j--) arr[j] = arr[j-1]; arr[0] = tem; } return; };>