指针操作赋值方法详解
在C或C++编程中,指针是绕不开的核心概念。很多人初学时对“指针操作赋值”感到困惑,其实只要理解了内存地址和变量间的关系,就会发现它并不神秘。
假设你有个快递柜,每个格子都有编号。变量就像存放在格子里的物品,而指针就是记录这个格子编号的纸条。指针操作赋值,其实就是把某个变量的“格子编号”写到指针里,或者通过这张纸条去修改格子里的内容。
定义与基本赋值
声明一个指针时,要用星号*表示它是指针类型。赋值时用取地址符&获取变量地址。
int num = 10;
int *ptr = # // 把num的地址赋给ptr这时ptr就“指向”了num。你可以通过*ptr来访问或修改num的值。
通过指针修改值
解引用操作符*可以拿到指针所指位置的值。如果赋值给*ptr,相当于直接改掉了原变量。
*ptr = 25; // 等同于 num = 25这种操作在函数传参时特别有用。比如你想让函数真正改掉外部变量,就得传指针进去。
指针间的赋值
两个同类型指针之间可以直接赋值,结果是它们指向同一个地址。
int a = 5;
int *p1 = &a;
int *p2;
p2 = p1; // p2现在也指向a之后无论用p1还是p2修改,影响的都是变量a。
常见误区提醒
刚上手容易犯两类错误:一是使用未初始化的指针,二是误把值当成地址赋给指针。
int *p;
*p = 100; // 危险!p没指向任何合法地址这就像拿着一张乱写的柜子编号去塞东西,可能破坏其他数据。正确的做法是先让它指向一个有效变量,或用malloc分配内存。
另一个典型错误:
int x = 20;
int *q = x; // 错了!应该写 &x这里漏了&,编译器通常会报警,但如果不注意就容易栽跟头。
掌握指针赋值的关键,是分清“地址”和“值”的区别。多写几个小例子,在调试器里看看指针里存的是什么,很快就能建立起直观感觉。