‘a’,返回的是a的起始地址。
“a”,a的字符常量。
数组定义的通用格式:
类型 数组名[下标1][下标2].....[下标n]
其中,类型为数组元素的基类型,即每个元素的类型。下标值n表示为所在位的数组元素个数,该维的数组下标的上界是n-1;C语言中数组下标下界始终为0.维数是下标的个数。
一维数组的定义:
类型 数组名[常数表达式];
Int a[10]
定义一个包括10个整型元素的一维数组。
元素为:a[0]、a[1]、....a[9]
- 数组名定义规则和变量名相同,遵循标识符定义规则
- 数组名后使用方括号括起来的常数表达式,不能用圆括号
- 常数表达式表示元素的个数,即数组长度,而不是数组的上界
- 常数表达式中可以包括常量的符号常量,不能包括变量。
- 数组必须先定义,然后使用。
- 一维数组元素在内存中的排列顺序是线性排列即连续存储的。
C规定只能逐个引用数组的元素,而不能一次应用整个数组。
一个数组元素实际就是一个变量名,数组元素和变量一样使用。
一维数组的初始化:
- 在定义数组时,对数组元素赋初值。
- 可以只给一部分元素赋初值。
Int a[10]={0,1,2,3,4}
3、如想使一个数组全部为值n,可为:int a[10]={0,0,0,0,0,0,0,0,0,0}
4、在对全部数组元素赋初值时,可以不指定数组长度。
例如:int a[]={1,2,3,4,5}
- 当数组被说明为静态存储类型或外部存储类型时,则在不显示给出初值的情况下,数组元素将在程序编译阶段自动初始化为0。
二维数组的初始化
- 分行给二维数组赋初值
- 也可将所有数据写在一个花括号内,按数组存储顺序对各元素赋值。
- 可以对部分元素赋初值。也可对数组中某个元素赋值。
- 也可对部分元素赋初值。
int a[3][4]={{1},{},{5,6}};
一维数组名作函数参数
使用简单变量作函数参数,能由实参向形参传递一个数据。使用数组名作函数参数,属于地址调用能由主调函数向被调函数传递数组的首地址,并能由被调函数向主调函数传递多个数据。
数组名作为函数参数
传递方式:属于地址调用,将实参数组首地址传给虚参,虚参也是一数组名。
虚参要求:必须是数组名。
实参要求:可为另一数组名。
哑实结合:哑实数组具有相同的首地址,哑实数组第一个元素占用同一存储单元,以后各元素按顺序一一结合。
函数传值(数组名)示意图
1、用数组名作为函数参数时,应该在主调函数和被调函数分别定义数组--实参数组、形参数组。
2、在被调函数中声明的形参数组的大小n,实际上不起作用,因为C编译对形参数组的大小不做检查,只将实参首地址传给形参数组。
3、实参与形参既可同名也可不同名,它们的数组名代表的是数组的首地址。
4、若被调函数中改变形参数组的元素值,则实参数组中的元素值也会随之发生改变。注意这种改变不是形参传给实参造成的(C语言不允许在这种反向的值传递),而是由于形参和实参两个数组在内存中因指向同一地址而共享同一段内存造成的。
字符数组的定义
格式:char 数组名[常数1][常数2]......;
字符数组的初始化:
- 将逐个字符赋给数组中各元素
- 花括号中初值的个数大于数组长度,则按语法错误处理
- 如初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。
- 如初值个数等于数组长度,则在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
字符串和字符串结束标志:“\0”
利用循环逐个字符输入输出:%c,必须输入相应个数。
将整个字符串一次输入输出:%s,输入想要的个数回车即可。
Puts和gets函数一次只能输入一个。
一个变量两个值,一个地址值一个内容值。
例 *p
*p是指针,指的是地址。
p是指针变量,指的是存放地址的变量。
指针的类型指的是指针指向的变量是什么类型。
指针属性是由*说明的。
定义语句中的*号只是说明作用,执行语句才是取内容。