很多人第一次学习 C 语言,都会遇到同一个问题:
int age = 18;
int *p = &age;
为什么需要一个 p?
直接使用 age 不就可以了吗?
为什么 C 语言要设计这么复杂的东西?
如果这个问题没有想明白,那么后面的:
-
二级指针
-
函数指针
-
动态内存
-
链表
-
树结构
都会越来越难理解。
实际上,指针并不是 C 语言创造出来的一种奇怪语法,而是把计算机底层一直存在的“寻址机制”直接暴露给了程序员。
想理解指针,首先要理解两个问题:
-
数据到底存在哪里?
-
程序又是如何找到这些数据的?
一、变量,本质上是一块存储空间
学习 C 语言时,我们经常写:
int age = 18;
看起来很简单。
但程序运行时,并不是直接保存一个叫 age 的东西。
更准确地说:
编译器会为变量安排存储空间(如果它


