C语言中为了表示指向某个类型对象地址这一概念,特别推出了“指针”这个名词
为此也引申出了几个容易混淆的概念:指针类型,指针变量,指针值
就像为了表示不同整数,推出其中一种int的概念,如下
int a=1
int表示这个整数的类型
a是1这个整数对象取的标识符,我们也称其为int类型变量
1是这个整数对象的值
我们会说 声明一个int类型的变量a,并且初始化为1。
对于指针也一样
int* p=&a;
int* 表示int* 这种指针类型
p是&a的标识符,我们称其为int*类型的变量
&a是这个指针对象的值
因此直接说指针是一种变量是一种不准确的说法。
当然当我们熟悉了指针以后,为了方便起见,我们可以称p是指针。
那么&a是地址吗?
这也是一种不准确的说法
地址就是一个数值概念,譬如我们说地址00001,但是只是00001是无法确定是int对象的地址又或者其他类型对象的地址,而&a恰恰是能表示出它是a对象的地址,它是int*类型的。因此&a返回的就是一个指针(指针对象值)