技术中心
 
 

C语言入门教程-指针基础

   日期:2009-07-29     来源:互联网    

指针基础

将指针和普通变量进行比较,将有助于您理解指针。

所谓“普通变量”就是存储器中能够保存数值的一个位置。例如,当您声明变量i为一个整数时,四个字节的存储空间就为它预留出来了。程序中用i表示那个预留出的位置。在机器的层面上看,这个位置具有一个内存地址。从这个地址开始的四个字节对您(程序员)来说就是变量i,它们可以保存一个整数。

指针就不同了。指针是指向另一个变量的变量。意思是一个指针保存的是另一个变量的内存地址。换句话说,指针保存的并不是普通意义上的数值,而是另一个变量的地址值。一个指针保存了另一个变量的地址值,就说这个指针“指向”了那个变量。

因为指针保存了地址而不是数值,所以它有两个部分。指针本身保存一个地址,这个地址又指向一个数值,即:指针本身和被指向的数值两部分。这个概念开始可能有些不好理解,而一旦掌握将是极有裨益的。

下面的例子显示了一个典型的指针:

#include 

int main()
{int i,j;int *p; /* 指向整数的指针 */
p=&i
*p=5;j=i;
printf("%d %d %d
n", i, j, *p);return 0;}

程序的第一行声明了两个普通的整型变量i和j。int *p这行声明了一个名为p的指针。它告诉编译器,所声明的变量p是一个指向整数的指针。*表示声明的是指针而不是普通变量。您可以创建任何类型的指针:float,结构体,char等等。只要用*指出您要的是指针而非普通变量即可。

p=&i 这行您肯定还没见过。C语言中, 这个表达式的意思就是“将i的地址赋值给p。”这条语句一经执行,p就“指向”了i。而此前p的内容是一个未知的随机地址,直接使用的话很可能会导致程序错误或类似的程序崩溃。

画图是观察程序运行过程的好方法。声明i、j和p后,程序的状态是这个样子:


“指针”示例

上图中的三个变量i、j和p都被声明过了,但还没有初始化。所以将两个整型变量以含有问号的方框表示——程序执行到这一步时它们的内容可以是任何值。将指针以圆圈表示,以区别于保存数值的一般变量,随意的几个箭头表示它现在可能指向任何一个位置。

执行了p=&i这行后,p被初始化为指向i,像这样:

“指针”示例

p指向i之后,i代表的内存位置就有了两个名字。它除了叫做i,现在还叫做*p。这就是为什么说C中的指针变量有两个部分:p是容纳地址的位置,而*p是地址指向的位置。因此*p=5的意思是将p指向的位置的值设为5,像这样:

“指针”示例

因为*p和i代表同一位置,i的值自然也就变成了5。于是j=i;将j也设为5,printf语句的输出就是5 5 5。

指针的主要特性是它天生具有两部分。指针本身除了保存地址,还指向某种类型的值,而这个值的地址正是指针保存的那个。在上面的例子中,指针本身是p,它指向的值是*p。

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢