完整代码
#include <stdio.h>
int main()
{
int num1 = 1024;
int num2 = 2048;
int * ptr_num1 = NULL;
int * ptr_num2 = NULL;
ptr_num1 = &num1;
ptr_num2 = &num2;
printf("num1 = %d\tnum1的地址是:%p\n", num1, ptr_num1);
printf("num2 = %d\tnum2的地址是:%p\n", num2, ptr_num2);
*ptr_num2 = *ptr_num1;
printf("重新赋值后:\n");
printf("num2 = %d\tnum2的地址是:%p\n", num2, ptr_num2);
ptr_num2 = ptr_num1;
printf("ptr_num2指向的内容是:%d\tptr_num2指向的地址是:%p\n", *ptr_num2, ptr_num2);
return 0;
}
运行结果
num1 = 1024 num1的地址是:0061FF14
num2 = 2048 num2的地址是:0061FF10
重新赋值后:
num2 = 1024 num2的地址是:0061FF10
ptr_num2指向的内容是:1024 ptr_num2指向的地址是:0061FF14
- 利用间接运算符*,将指针ptr_num1所指向的内容1024赋值给指针ptr_num2所指向的2048,则ptr_num2的地址不变,但该地址的内容由原先的2048变为了1024,相当于num2 = num1
*ptr_num2 = *ptr_num1;
printf("重新赋值后:\n");
printf("num2 = %d\tnum2的地址是:%p\n", num2, ptr_num2);
运行结果
- 指针赋值,将ptr_num1指向的地址赋值给ptr_num2,那么两个指针会指向同一个地址,所指向的内容也是相同的。
ptr_num2 = ptr_num1;
printf("ptr_num2指向的内容是:%d\tptr_num2指向的地址是:%p\n", *ptr_num2, ptr_num2);
运行结果

小结
- 指针是一个存储了另一个变量的地址的变量;
- 指针存储了一个地址,那么通过这个地址就可以找到对应的变量值,即该指针指向了这个变量;
- 指针的指向是可以通过指针的赋值改变的。