C语言 百文网手机站

c语言之指针基础知识

时间:2021-04-13 13:58:57 C语言 我要投稿

c语言之指针基础知识

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

c语言之指针基础知识

c语言之指针基础知识

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

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

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

  #include

  int main()

  {

  int i,j;

  int *p;

  p=&i;

  *p=5;

  j=i;

  printf("%d %d %d ", 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。

【c语言之指针基础知识】相关文章:

C语言之复杂指针详解09-22

C语言指针和数组基础知识10-04

C++ this指针详解10-01

C语言指针教学09-25

C语言指针函数和函数指针详解06-10

C语言指针的传递10-06

C语言指针的用法10-05

C语言指针用法详解09-20

C语言的指针类型解析10-06