一、指针基础概念
(一)指针的本质
指针是 C 语言中一个重要的概念,其本质是内存地址。在计算机内存中,每个字节都有唯一的编号,这个编号就是我们所说的内存地址,而指针变量就是用于存储这些内存地址的变量。
(二)指针的声明语法
基本数据类型* 标识符(=初始化);
- 习惯上,指针变量名会以
p
开头,例如:int* p;
表示声明一个指向整型数据的指针变量p
- 指针变量的类型必须与它所指向的数据类型一致,这样才能正确地访问和操作对应内存空间的数据
(三)指针的内存大小
指针变量本身在内存中所占的空间大小取决于计算机的架构:
- 在 x86 架构(32 位系统)中,指针占4 字节
- 在 x64 架构(64 位系统)中,指针占8 字节
(四)特殊符号&
的多重含义
- 在指针中 :代表取地址操作符,用于获取变量的内存地址,例如
&a
表示获取变量a
的地址 - 在引用中:代表引用声明,用于定义变量的别名
- 按位与操作:对两个操作数进行按位与运算
- 逻辑与操作(&&):用于逻辑表达式中,进行联言判断
(五)解引用操作
解引用操作是通过指针访问其所指向的内存单元中存储的值,形象地说就像 "偷家"------ 根据地址找到里面的东西。
- 语法:
*地址
- 示例:若
p
是一个指向整型变量a
的指针,那么*p
就表示访问a
的值
(六)特殊指针
- 野指针:如同 "熊孩子",是指向未定义或非法内存地址的指针。访问野指针会导致程序崩溃或产生不可预知的结果,是编程中需要极力避免的问题
- 空指针 :指向空地址的指针,在 C 语言中通常用
NULL
或0
来表示。空指针是一个合法的指针值,用于表示指针不指向任何有效内存地址
二、作用域概念
(一)作用域的定义
作用域是程序中定义的变量、函数等实体可以被访问的区域范围。在 C 语言中,作用域主要由花括号{}
来界定:
{ // begin
// 这里定义的变量、函数等只在这个花括号内有效
// 代表一个作用域(在里面才有作用)
} // end 位置
(二)作用域的重要性
- 作用域决定了标识符的可见性和生命周期
- 在一个作用域内定义的变量,只能在该作用域及其嵌套的子作用域中访问
- 当程序执行离开某个作用域时,该作用域内定义的自动变量会被销毁,内存空间被释放
合理理解和运用指针与作用域的概念,是掌握 C 语言编程的关键基础,有助于编写更高效、更安全的代码。在实际编程中,要特别注意避免野指针问题,合理规划变量的作用域,确保程序的稳定性和可靠性。