目录
1、什么是指针
C语言中的指针是一个变量,它存储另一个变量的内存地址。 理解指针的关键在于它与内存地址的关系。 你可以使用指针来直接访问和操作内存中的数据,这使得C语言能够进行底层操作,但也带来了更高的复杂性和潜在的风险。
2、指针的使用
-
指针声明: 使用
*
号声明指针变量,例如int *ptr;
声明了一个指向整型变量的指针ptr
。 注意,*
是声明的一部分,而不是用于解引用指针的操作符。 -
指针赋值: 可以将变量的地址赋给指针,例如
ptr = &variable;
其中&
是取地址运算符。 -
指针解引用: 使用
*
号解引用指针,访问指针指向的内存单元中的值,例如value = *ptr;
。 -
指针运算: 可以对指针进行加减运算,这通常用于遍历数组或其他内存块。 指针加减运算的步长取决于指针指向的数据类型的大小。
-
空指针:
NULL
指针表示指针不指向任何有效的内存地址。 检查空指针可以避免程序崩溃。 -
野指针: 未初始化或指向已释放内存的指针被称为野指针,访问野指针会导致程序崩溃或不可预测的行为。
3、指针常量与常量指针
-
指针常量 (Pointer to a constant):
const int *ptr;
或者int const *ptr;
这两种写法等价。const
修饰的是int
,表示指针ptr
指向的整数是不可修改的。指针ptr
本身的值(也就是它指向的内存地址)是可以改变的。 你可以让ptr
指向另一个整数,但你不能通过ptr
修改它指向的整数的值。 -
常量指针 (Constant pointer):
int * const ptr;
const
修饰的是ptr
本身,表示指针ptr
指向的内存地址是不可改变的。 一旦ptr
被初始化指向某个整数,它就永远指向那个整数,你不能让它指向其他整数。 但是,你可以通过ptr
修改它指向的整数的值。
简单来说:
- 指针常量:指向常量的指针。指针可以变,指向的内容不变。
- 常量指针:指向某个特定位置的常量指针。指针不可变,指向的内容可以变(如果内容本身不是常量)。