代码逐行解释如下:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a = 17; // 声明整型变量a,并初始化为17
int b = 21; // 声明整型变量b,并初始化为21
int *q = malloc(sizeof(int)); // 为指针q动态申请内存
double *r = malloc(sizeof(double)); // 为指针r动态申请内存
int *p = &a; // 声明指针p指向变量a的地址
// (1) 关键点
*p = b; // 将指针p指向的地址中的内容修改为“21”,
// 也就是说,此条语句执行过后,a的值将会变为21
*q = a; // 将指针q指向的地址中的内容修改为“21”(此时a的值已经是21),
// 也即,此条语句执行过后,b的值将会变成21
*r = *p; // 将p指向的地址中的内容拷贝一份存放到r指向的地址中
p = q; // p同时指向q指向的地址
// (2) 实验证明
printf("int = %d bytes\n", sizeof(int)); // 打印整型变量所占字节数:4
printf("int* = %d bytes\n", sizeof(int*)); // 打印整型指针所占字节数:4
printf("&a = %p, &b=%p\n", &a, &b); // 打印变量a和b的内存地址
printf("a=%d, b=%d\n", a, b); // 打印变量a和b当前的值
// 打印指针p、q、r的指向的内存地址以及地址内存放的内容
printf("p=%p q=%p r=%p *p=%d *q=%d *r=%f\n", p, q, r, *p, *q, *r);
free(q); // 释放指针q指向的地址
free(r); // 释放指针r指向的地址
return 0;
}
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。