- 数组的定义 变量类型 数组名称[数组长度];
[]
内为常量 在C99标准可放入变量
定义数组后再改变n的值后 数组长度不改变
但是无论如何,数组长度必须确定
int arr1[10];
int n=10;
int arr2[n];
n++; // arr2 的长度仍为10
数组内所有元素的变量地址是连续的
-
数组的赋值
- 将数组内元素按顺序赋值
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
- 将
arr[1]
元素赋值为2
int arr[1] = 2;
- 自动推断数组长度
[]
内不写长度 长度由{}
内值的个数决定int arr[] = {1,2,3,4,5};
- 将数组内元素按顺序赋值
-
访问数组 数组下标从
0
开始到n-1
不可以越界访问数组int arr[10]; arr[10] = 1; //编译通过 但是很危险
-
二维数组的定义
变量类型 数组名[行数][列数];
int arr[5][5]; arr[1][2] = 2; //将第2行第3列的元素赋值为2
arr[5][5] 0 1 2 3 4 0 1 2 2 3 4 最直观
int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
变量类型 数组名[行数][列数]={数据1,数据2,数据3,数据4...};
int arr[2][3] = {1, 2, 3, 4, 5, 6};
变量类型 数组名[][列数]={数据1,数据2,数据3,数据4...};
可以省略行数,不可省略列数int arr[][3] = {1, 2, 3, 4, 5, 6};
-
通过嵌套循环遍历二维数组
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++){ printf("%d ", arr[i][j]); } printf("\n"); }
-
数组名的意义
-
数组名存储数组首地址
int arr[10]; printf("%p", arr);
-
sizeof
关键字求数组长度int arr[10]; int length = sizeof(arr) / sizeof(arr[0]); // or int length = sizeof(arr) / sizeof(int); printf("%d", length);
-
返回值类型 函数名(参数类型 参数名){
code;
return 返回值;
}
-
函数名驼峰命名法则
void iAmAFunction(int a);
-
无参无返
void function(){ printf("this is a function\n"); return; //返回值为void时 return;可以不写 }
-
有参无返
void function(int a) { printf("this is a function\n"); printf("a = %d\n", a); }
-
无参有返
int function() { printf("this is a function\n"); return 1000; } int main() { printf("%d", function()); return 0; }
-
有参有返
int function(int a) { printf("this is a function\n"); return a; } int main() { printf("%d", function(100)); return 0; }
当值传递时,函数的形参发生改变,并不会影响实参
原因:实参和形参的内存是分别单独开辟的
//定义函数 实现两个数字进行交换函数
void swap(int num1, int num2) {
printf("before:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
int tmp = num1;
num1 = num2;
num2 = tmp;
printf("after:\n");
printf("a = %d\n", a);
printf("b = %d\n", b);
// return:返回值不需要的时候,可以不写return
}
int main() {
int a = 10;
int b = 20;
printf("a = %d\n", a);
printf("b = %d\n", b);
swap(a, b); // 执行时未改变a b的值
printf("a = %d\n", a); // 10
printf("b = %d\n", b); // 20
return 0;
}
提前告诉编译器函数的存在,可以利用函数的声明
定义在main函数前可以不写声明
声明可以写多次,定义只能写一次
int max(int a, int b);
int main()
{
int a = 10;
int b = 20;
printf("%d", max(a, b));
return 0;
}
//比较函数,实现两个整型数字进行比较,返回较大的值
int max(int a, int b) //定义
{
return a > b ? a : b;
}
给定五只小猪的体重,利用一维数组存储,经过循环比较后,输出最大和最小体重。
input
300 350 200 400 250
output
max = 350, min = 200
//code
- 冒泡排序
int arr[9] = {4, 2, 8, 0, 5, 7, 1, 3, 9};
//开始冒泡排序 升序排列
//总共排序轮数为 元素个数-1
for (int i = 0; i < 8; i++) {
//内层循环对比次数=元素个数-当前轮数-1
for (int j = 0; j < 8 - i; j++) {
//如果第一个数字大于第二个数字,交换
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
//循环遍历数组
for (int i = 0; i < 9; i++) {
printf("%d", arr[i]);
}
已知三人三次考试成绩,利用二维数组存储成绩,并输出每人考试总分,平均分。
example
int arr[3][3] = {{100, 100, 100},
{90, 50, 100},
{60, 70, 80}};
int name[3] = {1, 2, 3}
output
1: sum = 300, ave = 100
2: sum = 240, ave = 180
3: sum = 210, ave = 70
//code