如果我们声明一个int类型的变量v,则v实际上将存储一个值。
v现在的值等于零。但是,每个变量除自身的值外,还具有其内存的地址(或简单地说,位于内存中的位置)。 可以通过在变量名称前加上连字号(&)号来检索其内存地址。
既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址。
在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?
因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练,高效。
在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。 用“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清楚,表示更为明确。 这也是引入“指针”概念的一个重要原因。
上图详细解释了变量名,变量值,变量地址,和指针的关系。
例1.变量的地址,取址运算符
#include <stdio.h> int main () { int v = 0; printf("V address %d\n", &v); return 0; }
以上程序声明一个变量v, 取址运算符&发现v的地址。
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
指针变量声明的一般形式为:
int *y = &v;
变量 – 存储在存储/内存地址中的值,该内存地址可以被跟踪
指针 – 指向另一个变量的存储/内存地址的变量
两个有关的运算符:
1) &: 取地址运算符。
2) *:间接运算符 (址值运算符,后面介绍)。
C语言中提供了地址运算符&来表示变量的地址。
其一般形式为:
&变量名;
如&a 表示变量 a 的地址,&b 表示变量 b 的地址。变量本身必须预先说明。