C/C++语言中的指针

这几天在接触一些C语言的项目,发现自己对C语言,包括C++的知识理解不透彻,尤其是指针。导致项目完全看不懂。因此这一篇就来补补C/C++中指针的知识。

参考书籍《C++ Primer》


指针

简单比喻

什么是指针,假如你住5楼503号房间。那么有一张纸条,纸条上写着5楼503。那么,我们就说这张纸条就是指向你房间的一个指针。

定义

指针(Pointer)是指向(Point to)另外一种类型的复合类型。

指针有两个特点:

  • 本身是一个对象,允许对指针进行赋值和拷贝,而且在指针的生命周期内可以先后指向几个不同的对象。
  • 无须在定义时赋初始值

一个简单例子

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {
int ival = 42;
int *p = &ival;

printf("p是一个指针,P为%p\n",p);
printf("*p是指针指向的变量,*p为%d\n",*p);
return 0;
}

输出

1
2
p是一个指针,P为0x7ffe09031b1c
*p是指针指向的变量,*p为42

在这个例子中,我们用 int *p来定义指针,这时候p是一个指针。&ival的意思是取int型变量ival的地址。

而在输出的时候,*p是指针指向的变量,也就是说,*号在这里成了解引用符号。仅在指针确实指向了某个对象,即指针确实有效的情况下,*p才适用。

理解的关键:在定义阶段, 用int *p用来定义指针。在操作阶段,*p是解引用。

阅读更多