上一页 下一个

C语言编程基础

指针基础知识

在这张图中,三个变量i、j和p已经被声明,但这三个变量都没有初始化。"width=
在这张图中,三个变量i、j和p已经被声明,但这三个变量都没有初始化。

要理解指针,可以将它们与普通变量进行比较。

“正常变量”是内存中可以保存值的位置。例如,当你声明一个变量作为一个整数,为它预留了四个字节的内存。在程序中,通过名称来引用内存中的位置.在机器级别上,该位置有一个内存地址。该地址的四个字节为程序员所知,四个字节可以保存一个整数值。

广告

指针则不同。指针是一个变量换到另一个变量。这意味着指针保存着另一个变量的内存地址。换句话说,指针不持有传统意义上的值;相反,它保存了另一个变量的地址。指针通过保存另一个变量地址的副本来“指向”该变量。

因为指针保存的是地址而不是值,所以它由两部分组成。指针本身保存地址。该地址指向一个值。这里有指针和所指向的值。在你适应之前,这个事实可能会让你有点困惑,但一旦你适应了,它就会变得非常强大。

下面的示例代码显示了一个典型的指针:18新利最新登入

#include  int main() {int i,j;int * p;/*指向整数的指针*/ p = &i;* p = 5;j =我;Printf ("%d %d %d\n", i, j, *p);返回0;}

该程序中的第一个声明声明了两个普通整数变量而且j.这条线int * p声明一个名为p.这一行要求编译器声明一个变量p这是一个指针到一个整数。的指示声明的是指针,而不是普通变量。您可以创建指向任何对象的指针:浮点数、结构型、char型等等。只要使用表示需要指针而不是普通变量。

这条线P = &i;对你来说绝对是新的。在C语言中,叫做地址运算符.表达式表示“变量的内存地址因此,就有了这样的表达P = &i;意思是“分配给”p地址:一旦你执行了这个语句,p“点”.在此之前,p包含一个随机的,未知的地址,它的使用可能会导致分割错误或类似的程序崩溃。

把正在发生的事情形象化的一个好方法是画一幅画。后j而且p宣布后,世界看起来就像上图。

在这幅图中有三个变量j而且p已经声明,但是三个都没有初始化。因此,这两个整数变量被绘制为包含问号的方框——在程序执行的这一点上,它们可以包含任何值。指针被画成一个圆,以区别于保存值的普通变量,随机箭头表示此时它可以指向任何地方。

行后p = &I;p初始化和它指向,像这样:

一次p指出,内存位置有两个名字。它仍然被称为,但现在它被称为* p也这是C语言中谈论18新利最新登入指针变量的两部分:p位置是否包含地址,而* p该地址所指向的位置。因此* p = 5表示由指向的位置p应该设置为5,如下所示:

因为位置* p它的值也是5。因此,j =我;j到5,和printf声明中产生5 5 5

指针的主要特征是它的两部分性质。指针本身保存一个地址。指针还指向一个特定类型的值——该点所在地址的值。在这种情况下,指针本身是p.所指向的值为* p

特色
Baidu