#include <stdio.h>
int main(void){
int box_1 = 3;
int box_2 = 5;
int box_3 = 10;
int *person_1, *person_2;
puts("--------盒子中糖果的数量---------");
printf("第一个盒子有%d个糖果。\n", box_1);
printf("第二个盒子有%d个糖果。\n", box_2);
printf("第三个盒子有%d个糖果。\n", box_3);
putchar('\n');
puts("----------------------------------");
puts("-----2个人第一次获取的糖果数量----");
person_1 = &box_1; // 将第一个盒子和盒子中的糖果一起给第一个人
person_2 = &box_3; // 将第三个盒子和盒子中的糖果一起给第二个人
printf("第一个人获得%d个糖果。\n", *person_1);
printf("第二个人获得%d个糖果。\n", *person_2);
person_1 = &box_2; // 把第一个人手中的糖果盒换成第二个糖果盒(第二个糖果盒有5个糖)。
*person_2 = 20; // 把第一个人手里的糖果盒中的糖果换成20颗糖(盒子不变,糖果数量发生改变)。
putchar('\n');
puts("----------------------------------");
puts("-----2个人第二次手中糖果数量------");
printf("第一个人拥有%d个糖果。\n", *person_1);
printf("第二个人拥有%d个糖果。\n", *person_2);
putchar('\n');
puts("----------------------------------");
puts("--------盒子中糖果的数量---------");
printf("第一个盒子有%d个糖果。\n", box_1);
printf("第二个盒子有%d个糖果。\n", box_2);
printf("第三个盒子有%d个糖果。\n", box_3);
return 0;
}
运行结果:
变量 person_1 和 person_2的声明中,变量名前带有 *。通过该声明定义了两个“指向int型变量的指针变量”,它们指的是int型对象。
通过以下声明定义的 person_2 不是指针变量,而是整型变量。
int *person_1, person_2; // person_1 为指针变量,person_2 为整型变量
person_1 = &box_1;
- person_1 和 box_1 的关系: person_1 指向 box_1 (person_1 拥有了 第一个盒子的使用权)。
- *person_1 就等于 “person_1 指向的对象”,*person_1 的值 等于 box_1 的值。*person_1 也算是 box_1的别名。
*person_2 = 20; // 当20赋值给 *person_2 就等同于将20赋值于 box_3
- 当person_1 指向 box_1时:
*person_1如果增加或减少相应的值,box_1的数量也随之增加或减少,反之,box_1的值增加或减少,person_1的值也随之增加或减少。
注:
-
int 型变量:
- 保存 “整数” 的盒子。
-
指向 int 型变量的指针变量:
- 保存“存放整数对象的地址”的盒子。
-
当指针p的值为对象x的地址时,p指向x,*p就是x的别名。
-
将取址运算符 & 写在Type型对象 x 前得到的 &x 为Type *型 指针,其值为 x 的地址。