1. 指针基础概念解析
指针是C语言区别于其他高级语言的核心特性之一。很多初学者第一次接触指针时会产生困惑——这个"指向地址的变量"到底有什么用?我当年学习时也花了整整两周才真正理解指针的本质。
简单来说,指针就是存储内存地址的变量。但这句话背后隐藏着几个关键点:
- 每个变量在内存中都有唯一的地址
- 指针变量存储的是这个地址值
- 通过指针可以间接访问和操作该地址的数据
举个例子,假设我们有一个整型变量:
c复制int num = 42;
在32位系统中,这个变量会占用4字节内存空间。假设系统为它分配的内存地址是0x7ffd3312,那么指针变量存储的就是这个0x7ffd3312地址值。
注意:指针的大小与系统架构有关。32位系统指针通常4字节,64位系统8字节。可以用sizeof(void*)查看。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指针的声明与初始化
2.1 基本语法格式
指针变量的声明遵循特定语法规则:
c复制数据类型 *指针变量名;
这里的星号()是指针声明符。常见错误是混淆声明时的和使用时的*:
c复制int *p; // 声明一个整型指针
*p = 10; // 使用指针访问内存
2.2 初始化注意事项
未初始化的指针是危险的"野指针",可能指向任意内存地址。好的实践是:
- 声明时立即初始化
- 暂时不用时设为NULL
- 使用前检查有效性
c复制int *p = NULL; // 安全初始化
if(p != NULL) {
*p = 10;
}
3. 指针的基本操作
3.1 取地址与解引用
&运算符获取变量地址,*运算符解引用指针:
c复制int var = 20;
int *ptr = &var; // ptr现在存储var的地址
printf("%d", *ptr); // 输出20,通过指针访问var的值
3.2 指针的算术运算
指针运算以所指向类型的大小为单位:
c复制int arr[3] = {10,20,30};
int *p = arr;
p++; // 移动sizeof(int)个字节,指向arr[1]
重要区别:指针加减是移动若干个数据单位,而不是简单的数值加减。这在数组遍历时
