二维数组
格式: 类型符 数组名[行:常量表达式] [列:常量表达式]
注:数组名要符合标识符规则
数组长度必须确定,即个数确定
常量表达式不能是变量
初始化
- 定义时全部元素赋予初值
int array[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- 定义时一部分元素赋予初值,其余系统自动给0
int array[3][4] = {{1},{5},{9}};
int array[3][4] = {{1},{0,6},{1,0,11}};
- 初始值全部赋予0
int array[3][4] = {0};
- 如果数组元素都赋予初值,数组第一维长度可以省略,由元素初值数量倒推
int array[][4] = {{1,2,3},{0},{5,6}};
函数传参
- 将一个数组作为实参传递给一个函数,主调函数只需要传递数组名和数组大小。
- 将一个数组作为形参时,形参定义数组名[ ] [ N ] 和数组行与列大小
语法规则:
-
主调函数
- 背调函数名(实参数组名,实参数组行大小,实参数组列大小)
-
被调函数
- 被调函数名(形参数组名[ ] [ N ],形参数组行,形参数组列)
数组遍历
#include<stdio.h>
int main()
{
//二位数组的定义和初始化
int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int i,j,sum = 0;
printf("请输入3*4的二维数组:\n");
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
scanf("%d",&arr[i][j]);
}
}
//二维数组的打印
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
}
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
sum += arr[i][j];
}
}
printf("ave = %d",sum/12);
return 0;
}
逗号表达式
格式:(表达式1,表达式2,表达式3,…)
定义: 是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子连接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
总体基本规则:
- 逗号表达式将两个及其以上的式子连接为一个表达式。
- 逗号表达式按照从左向右的顺序计算每个子表达式的值
- 逗号表达式的最后一个表达式必须有返回值,因为整个表达式的值是最后一个子表达式的值。其余表达式可以没有返回值。
例子
#include<stdio.h>
int main()
{
int a;
int i;
a = (1,2,3);
int brr[3] = {(1,2,3),0,0};
for(i = 0; i < 3; i++)
{
printf("%d ",brr[i]);
}
printf("\n");
printf("%d",a);
return 0;
}
变量类型和作用域
定义变量4种情况
- 在函数的开头定义
- 在函数内定义
- 在复合语句中定义
- 在函数外部定义
全局变量和局部变量定义
全局变量:在函数之外定义的变量称为全局变量,全局变量可以为本文件中其他函数所共用,它的有效范围从定义变量开始到本文件结束。
注:如果在同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽,即它不起作用
局部变量: 在函数内部定义的变量称为局部变量,只能在本函数内部使用。
注:不同函数可以使用相同的局部变量名,它们代表不同的对象,互不干扰。一个函数的形参也为局部变量。在函数内部,复合语句也可以定义变量,这些变量也是局部变量,只在此复合语句中有效。
全局变量和局部变量区别
- 作用域不同: 全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
- 内存存储方式不同: 全局变量存储在全局数据区中,局部变量存储在栈区
- 生命周期不同: 全局变量的生命周期和主程序一样,随主程序的销毁而销毁,局部变量在
函数内部或循环内部,随函数的退出或循环退出而销毁
- 使用方式不同: 全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量。
变量定义和声明
变量定义: 建立存储空间的声明叫定义
如:int a; //是定义,不是声明
变量声明: 前提是已经被定义过,声明只是扩展作用域
如:extern a; //是声明,不是定义
关键字extern,可以在一个文件中引用另一个文件中定义的变量或函数,用extern声明的变量不要初始化
内部函数和外部函数
- 外部函数: 可供其他文件调用的函数,函数定义时左端加上关键字extern,C语言规定定义函数省略extern,则默认是外部函数
注:其他文件可以调用,代码复用率高,其他文件调用时,需要加上关键字extern
- 内部函数: 如果一个函数只能被本文件中的其他函数所调用,就称其为内部函数,又称为静态函数,定义时需要在前面加上关键字static
注:大型程序分工编写时,各自编写自己的文件模块,不必担心其他文件模块中的同名函数导致冲突。