Menu Close

C语言 – 指针是如何工作的?

如果我们声明一个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 的地址。变量本身必须预先说明。

 

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts