C语言-指针入门

指针被称为"C语言的灵魂"。实际上是一种专门用于保存内存地址的变量。

1.定义一个指针

在C语言中,我们使用形如int *p;的语句来声明一个指针,其中int可以替换成char,double等基础数据类型,跟在p前面的*表明p是一个指针类型的变量。但在程序编写过程中,这样仅声明指针却不进行初始化是非常危险的,这类指针通常被称为"野指针"。因此推荐在声明的同时便对指针进行初始化:

int i = 10;
int *p = &i;  // 用p保存i的内存地址

可能新学的同学看不大明白这两行代码,没关系,接下来便是对这两行代码的解释。

2.指针的基础使用

在学习指针基础使用之前我们最好能够了解一些关于计算机中内存预备知识。
在计算机中,内存在逻辑上会被划分为很多部分以方便CPU的访问。可以想象成所有数据住在一个名为"内存"的地方,而各个数据都待在各自"家"中,为了方便大家找到这些数据,每个数据存在的地方都有一个对应的地址(相当于门牌号)。
下面我们用一张图模拟一下在上述代码运行后i和p在内存中的分布情况:
内存情况
上图中最左侧是变量p和i的内存地址,而矩形内便是变量的内存中实际存放的数据。显然,指针p的内存中存放的是i的内存地址。
同时,因为所有指针存放的都是内存地址,因此同一环境下所有指针的字长都是相同的(例如32位时字长为8,64位时字长为16)。

(1)取地址符&
在上文的指针初始化代码中,我们可以看到int* p = &i这部分代码,这句表达式的作用即是通过取地址符&将整形变量i的内存地址赋值给整形指针p。即上图中,在p对应内存中写入i的内存地址2000H。

(2)指向运算符*
在声明结束后,我们可以通过指向运算符*,以形如*p的方式,来读取指针所指向的内存地址中存放的内容(通常简称为指向的内容)。

我们通过两行代码看看&和*的用法:

printf("p = %d\n", p);  // 输出指针p的存放的内容(此处为i的内存地址)
printf("*p = %d\n", *p) // 输出指针p指向的内容 (即i在内存中的内容)

代码运行结果如下图:
代码运行结果

猜你喜欢

转载自www.cnblogs.com/Bylight/p/10451598.html