一、 数组
一维数组
int states[20]; //创建内含20个int型元素的数组
char chs[15]; //创建内含15个char类型元素的数组
int pow[3] = {1,2,3} //声明并初始化pow数组
int qw[4] = {1,2}
方括号[]表示states 、chs是数组。其中的数字表明数组中含有多少个元素。
通过数组下标数(也成为索引)表示数组中的各元素,元素编号从0开始。要防止数组下标超出边界,即必须确保下标为有效的值。C 标准中使用越界下标的结果是未定义的(编译器不会检查这种错误)。
初始化,元素不足时,缺少的元素会自动初始化为0;元素过多时,会出错。
多维数组
以二维数组为例:
float rain[5][12]; /*内含5个数组元素的数组,每个数组中含有12个float类型的元素*/
int pp[2][3] = {{1,2,3}{4,5,6}} //声明并初始化数组
初始化,元素不足时,缺少的元素会自动初始化为0;某一行的元素过多时,该行会出错,但是不会影响其他行的初始化。
计算机中,多维数组的数据是按顺序储存的。
二、 指针
指针(pointer)是一个值为内存地址的变量。指针的值是它所指对象的地址。
指针加1,指针的值递增一个它所指类型的大小(以字节为单位)。
int * ptr ; // 声明一个指向int类型的指针。*表示声明的是个指针。
ptr = &p; //把p的地址赋给ptr, 读作“ptr 指向 p”
指针与数组的联系
指针能有效的处理数组。数组表示的方法其实在变相的使用指针。
可以使用指针标识数组的元素和获得元素的值,指针和数组可以视为一个对象的两种表示方法。
实际上,C语言标准在描述数组表示法的时候借助了指针。定义ar[n]的意思是*(ar+n),表示到内存的ar位置,然后移动n个单元,检索储存在那里的值。
编译器编译这两种写法生成的代码相同。
数组名是数组首元素的地址
假设pow为一个一维数组,那么有
pow == &pow[0];
#include <stdio.h>
int main()
{
int dates[3] = {1,2,3};
int * ptr = &dates[0];
printf("%d",ptr == dates);
}
输出为 1 。
那么
ptr+2 == &dates[2];
*(ptr+1) == dates[1];