给网站做外链要注意哪些,自学服装设计下载,摄影平台有哪些,国外免费网站域名服务器入口在 C 语言中#xff0c;指针#xff08;*#xff09;和取地址符#xff08;#xff09;是两个核心概念#xff0c;用于实现变量地址的传递和间接访问。理解它们对掌握 C 语言的内存操作至关重要。
1. 指针符号#xff08;*#xff09;的双重含义
① 声明指针变量…在 C 语言中指针*和取地址符是两个核心概念用于实现变量地址的传递和间接访问。理解它们对掌握 C 语言的内存操作至关重要。
1. 指针符号*的双重含义
① 声明指针变量
在变量声明时* 表示 “这是一个指针变量”。指针变量存储的是内存地址而非实际数据。
int a 10; // 普通整型变量
int *p; // 声明一个指向int类型的指针② 解引用Dereference操作
在表达式中* 表示 “访问指针指向的内存地址中的值”。
p a; // p存储a的地址
printf(%d, *p); // 输出10通过p访问a的值
*p 20; // 修改p指向的内存中的值即a202. 取地址符 是一元运算符用于获取变量的内存地址。
int a 10;
int *p a; // p存储a的地址
printf(%p, p); // 输出a的内存地址如0x7ffeefbff5fc3. 结合使用函数参数传递
① 值传递普通变量
函数接收的是变量的副本无法修改原始变量。
void func(int x) {x 100; // 只修改副本不影响main中的a
}int main() {int a 10;func(a); // 传递a的值printf(%d, a); // 输出10未改变
}② 引用传递指针变量
函数接收变量的地址可以直接修改原始变量。
void func(int *p) {*p 100; // 通过指针修改原始变量
}int main() {int a 10;func(a); // 传递a的地址printf(%d, a); // 输出100已改变
}4. 实现交换的代码应用
在排序代码中swap 函数通过指针和取地址符实现变量交换
void swap(int *a, int *b) {if (*a *b) {int temp *a; // 保存a指向的值*a *b; // 将b指向的值赋给a指向的内存*b temp; // 将temp赋给b指向的内存}
}int main() {int x 20, y 15;swap(x, y); // 传递x和y的地址// 此时x15, y20
}x 和 y 获取变量的地址。int *a 和 int *b 声明指针参数。*a 和 *b 访问并修改原始变量。
5. 常见误区 混淆指针声明和赋值 int a 10;
int *p a; // 错误p需要存储地址而非值
int *p a; // 正确忘记解引用 void func(int *p) {p 100; // 错误修改了指针p本身而非p指向的值*p 100; // 正确
}总结
*声明指针变量类型后或解引用操作表达式中。获取变量的内存地址。指针传递让函数能够修改调用者的变量是 C 语言实现 “返回多个值” 的常用方式。