数组的定义(一维数组): (类型名 数组名[数组元素个数] = {} )数组
定义一个数组须要给定数组的类型,以及数组所包含元素的个数,如: int ar[10] = {};在定义数组时若不对数组进行初始化,里面为随机值,且在后面对数组进行赋值不能总体的进行spa
如: ar[10] = {1,2,3,4,5,6,7,8,9,10}(error) , 这种写法是错误的,只能经过访问数组内的每个元素对其进行赋值:如经过循环:指针
int ar[] = {1,2,3,4,5,6};//定义一个已初始化且包含六个整型元素的数组ar.
//int ar[] = {};error
int br[10];//定义一个未初始化的包含十个整型元素的数组br.
for (int i = 0 ; i < 10; i++) //利用循环对br进行赋值 { br[i] = i+1; }
对数组进行赋值.code
定义数组若未给定元素个数,则须要在{}内填入数据,不然将报错:如:int ar[] ;(error),正确写法应为 int ar[] = {1,2,3};blog
数组的元素的个数:编译
数组元素的个数能够经过(sizeof(ar)/sizeof(ar[0]))计算获得.其中sizeof(ar)为整个数组的大小,sizeof(ar[0])指的是数组元素类型的大小.class
例:变量
int main() { int ar[] = { 1,2,2,2,2,2,2,23,2,3,2,1, }; int size = 0; printf("ar size = %d", sizeof(ar) / sizeof(ar[0])); return 0; }
运行结果:循环
数组的访问:im
下标访问: ar[i] (下标访问时中括号外面的变量有多是数组名,也有可能为指针 => i[ar])
基地址访问: *(ar + i), i[ar]=>*(i+ar)
其中下标访问在编译连接过程会转化为指针访问 即基地址访问.
数组名:
除了在sizeof(ar) 以及 定义一个指向数组的指针int (*p)[2] = &ar 表明整个数组,在其余状况下,数组名会退化成,指向数组首元素的地址的指针.此时没法对数组名进行加一以及赋值操做.
即此时数组名ar 做为数组首元素地址时是一个指针常量没法进行ar++或ar = ar+1等操做!