目录
指针
指针( Pointer )是“稀饭( C Fans )”最挚爱的武器
C 的高效、高能主要来自于指针
很多“ Mission Impossible” 由指针完成
 大多数语言都有无数的“不可能”
 而 C 语言是
 “一切皆有可能” ——
 “Impossible is Nothing” ——
 
  
 
是谁惹的祸?
 几乎全是由指针和数组引起的非法内存访问导致的
黑客攻击服务器利用的 bug 绝大部分都是指针和数组造成的
 
   
 
 
理解指针要从变量的地址谈起
内存如何编址?

如何对变量进行寻址?


用什么类型的变量来存放变量的地址?
指针( Pointer )类型
指针变量 —— 具有指针类型的变量
 保存 32 位地址值 ——sizeof(pa) 是 4 个字节
 用什么数据类型去理解它所指向的存储单元中的数据呢?
 
     
 
   
如何显示变量的地址?
 
    使用未初始化的指针会怎样?
指针变量使用之前必须初始化
若你不知把它指向哪里,那就指向 NULL (在 stdio.h 中定义为 0 )

NULL是什么?
空 指针 —— 值为 NULL 的指针,即无效指针
问题: p = 0 和 p = NULL 有什么区别吗?
 p = NULL 可以明确地说明 p 是指针变量,而不是一个数值型变量
问题:空指针就是指向地址为 0 的存储单元的指针吗?
答案:不一定
 并非所有编译器都使用 0 地址
 某些编译器为空指针使用 不存在的内存地址
如何访问指针变量指向的存储单元中的数据?
通过 间接寻址运算符 访问(引用)指针变量指向的变量的值
—— 指针的解引用 (Pointer Dereference)
 
       
 
     
指针变量的定义和初始化
 
        
 
      









