指针的概念
内存地址就是指针,是一个常量,通过指针可以访问内存中存储的数据。例如,定义一个int类型的变量,示例代码如下:
int a=10;
上述代码定义了一个int类型的变量a,存储了整型的数据10,编译器会根据定义变量的类型为变量a分配4字节的连续内存空间。假如这块连续空间的首地址为0x0037FBCC,变量a占据0x0037FBCC~0x0037FBD0内存区域共4个字节的空间,0x0037FBCC就是变量a的地址。变量a在内存中的存储如图1所示。
图1 内存单元和地址
在图1中,变量a的地址为0x0037FBCC,0x0037FBCC就是指向变量a的指针,通过该指针可以访问变量a。
如果有一个变量专门用来存放地址(指针),这个变量就被称为“指针变量”。指针和指针变量是两个完全不同的概念,指针是一个地址,而指针变量是存放地址(指针)的变量。
在C语言程序中,定义指针变量的语法格式如下:
变量类型 *变量名;
关于上述语法格式的介绍如下:
(1)变量类型指的是指针指向的变量的数据类型,即指针类型在内存中的寻址能力,如char类型决定了指针指向1个字节地址空间,int类型决定了指针变量指向4个字节地址空间。
(2)*表示了定义的变量是指针类型。
(3)变量名是存储内存地址的名称,即指针变量,其命名方式遵循标识符命名规则。
下面的代码定义了不同数据类型的指针变量,具体如下:
char* i;
int* t;
double* c;
long* a;
long double* s;
unsigned int* T;
上述代码定义了各种类型的指针变量,在实际开发中,人们总会把指针变量简称为指针,如指针变量i往往会简称为指针i,但读者要理解其中的含义。
若将编写程序比喻成购买火车票,程序执行就类似于验票乘车去往目的地。如果把火车当作计算机内存,那么火车上有顺序排列的座位号相当于内存中的地址编号,座位上的乘客相当于存储在内存中的数据,通过座位号可以准确找到乘客,类似于使用地指针访问内存中的数据。
如果把乘务员比作指针变量,乘务员通过查看座位号就能确认乘客信息,这就好比通过内存地址获取内存中的数据。