核心:值和地址的表示和相互转换
* 和 & 是一组相反的操作:
* 从指定的地址中取出值
& 获得给定的值的地址
指针的秘密就在下图:
新的类型:指针,用来保存变量的地址
为了特别指出声明的变量是指针,需要使用新的符号 *
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> int main(int argc, char *argv[]) { int xiaowang_money = 320; // 小王 int xiaochen_money = 300; // 小陈 int *account = NULL; // 地址,该地址只能保存 int 变量 account = &xiaowang_money; // 将 account 关联到 xiaowang xiaowang_money = xiaowang_money + 100; *account = *account - 200; printf("xiaowang's account : %p\n", &xiaowang_money); printf("xiaowang's account : %p\n", account); printf("xiaowang's account : %8x\n", account); printf("now xiaowang has %d RMB\n", *account); account = &xiaochen_money; // 将 account 关联到 xiaochen printf("xiaochen's account : %p\n", account); *account = *account + 300; printf("now xiaochen has %d RMB\n", xiaochen_money); return 0; } |
有两种方法来更改钱的多少:
1:直接修改变量
2:指针方法:操作帐户(地址)修改
【野指针】
指针在使用前必须关联已分配的变量,或者初始化为零, 也就是 NULL。
野指针,也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
野指针的成因主要有两种: 指针变量没有被初始化;指针被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。