第六章 数组及字符串
第一节 一维数组
-
一维数组的定义
-
一维数组的初始化
-
一维数组的引用
6.1.1一维数组的定义
1.数组概念:一种由固定多个同类型的具有线性次序关系的数据所构成的复合数据。
2.格式:类型 数组名 [常量表达式]
3.说明:定义数据即在内存空间开辟一块连续的常量表达式*类型所占字节数大小的空间。
类型:除void类型以外任一种基本数据类型或构造数据类型,表示数据所有元素的类型。
数组名:一种用户自定义并符合变量名命名规则的标识符,表示数组名和数组首元素首字节地址。
常量表达式:用整型常量或值为整型的常量表达式表示数组元素个数。
4.注意:
①因为数组名表示一个地址常量,是多个元素的统称,所以不可直接对数组名直接进行运算等操作。
②一维数组只有一对方括号,用来表示数组长度。
③在数组定义后,已在内存中开辟好空间了,因此不能修改长度、超过定义数量使用。
④如果在定义时直接进行完全初始化,可以不加常量表达式,机器根据初始化元素数量进行分配空间。
【程序现场】6-1-1
#include<stdio.h>#define N 10int main(void){int i,arr[N]={1,2,3,4,5,6,7};printf("This is an array from %p\n",arr);for( i=0 ; i<N ; i++)printf("arr[%d]=%3d from %p\n",i,arr[i],&arr[i]);int *a[N]; //这是一个指针数组,即指针类型的数组a[0]=arr; //所以它存放的要是地址printf("a[0]=%p\n",a[0]);int (*b)[N]; //这是一个指向数组的指针,即整型数组的指针*b[0]=arr[0]; //所以用它才可以对数组进行引用printf("*b[0]=%d\n",*b[0]);return 0;}
6.1.2一维数组的初始化
1.说明:如同变量初始化,数组在定义的时候也可以利用赋值号加包含元素的“{}”进行初始化。
2.初始化规则:
①部分初始化:当“{}”中元素的个数小于总长度时,只对前几个连续的元素进行赋值,后续元素赋值为0。
②完全初始化:即将数组中每个元素都进行赋值,当完全初始化时,可不定义数组长度。
6.1.3一维数组的引用
1.说明:引用即是采用下面形式,对数组中元素经行操作。
2.形式:数组名 [下标表达式]
3.注意:
①依次表示数组元素时,下标是从0开始的,并且最大下标不得大于等于定义值。
②下标表达式的值要为整数。
③引用时对于编译器来说,数组名[下标表达式] = *(数组名+下标表达式) = *(首地址+下标表达式*数组类型字节数)。
【程序现场】6-1-3
#include<stdio.h>int main(){int arr[3];arr[0]=1;arr[1]=2;arr[2]=3;printf("arr[0] = %3d\n", arr[0]);printf("arr[1] = %3d\n", arr[3-2]);printf("arr[2] = %3d\n", 2[arr]);return 0;}