接下来我将讲解,数组和指针。
数组是构造数据类型之一,是具有一定顺序关系若干变量的集合,数据可以是多维的。
一维数组的一般形式为:存储类型 数据类型 数组名[表达式];如int a[10],表示定义了用于储存10个int类型大小的一维数组,数组名为a。
数组必须先定义后使用,且C语言中只能逐个引用数组元素,不能一次性引用整个数组。数组元素可用:数组名[整数常量或整形表达式]。
数组不初始化其元素值为随机数,对static数组不初始化其元素值为0,只给部分元素赋初值后续变量为0——编译阶段。
对于多维数组格式一般为:存储类型 数据类型 数组名[表达式][表达式]...[表达式]。其中元素存储是一维的,按行顺序优先。
在计算机内部存储器中,每一个字节单元都有一个编号,这个编号称为地址。C语言中,将内存单元的地址称为指针,将存储地址的变量称为指针变量。
对于地址,有两个重要的运算符,一个是&(取地址运算符),一个是*(解引用运算符)。
0x7ffcf813480c为a变量的地址,也为指针变量p的值,10为地址p中存储的变量的值。
指针和数组有很多相似的地方,数组和指针都可以用来访问存储在同一内存区域的一系列数据,可以通过数组名和下标来访问数组元素,也可以通过指针和其偏移量来访问。在很多情况下,数组名和指针可以互相转换,数组名可以被解释为指向其第一个元素的指针,而指针也可以被解释为指向一个具有特定大小的数组的指针。
不过也有很多不同的地方,数组是一个具有固定大小的数据结构,它包含了一系列同类型的数据元素。而指针则是一个变量,它存储了某个数据类型的内存地址。
数组名不能被赋值和算术运算,被认为是一个常量,表示的是数组在内存中的位置。而指针可以被赋值,可以改变它所指向的内存地址。
数组相对更安全,因为数组的大小是固定的,不能超出其边界。而指针则可能指向任意内存位置,如果不小心,可能会导致内存访问错误,如段错误或野指针。