C 语言 求解释一段代码

#include<stdio.h>#include<stdlib.h>intmain(void){inta=17;intb=21;int*q=malloc(sizeof(... #include <stdio.h>
#include <stdlib.h>

int main(void)
{
int a = 17;
int b = 21;
int *q = malloc(sizeof(int));
double *r = malloc(sizeof(double));
int *p = &a;
// (1)
*p = b;
*q = a;
*r = *p;
p = q;
// (2)
printf("int = %d bytes\n", sizeof(int));
printf("int* = %d bytes\n", sizeof(int*));
printf("&a = %p, &b=%p\n", &a, &b);
printf("a=%d, b=%d\n", a, b);
printf("p=%p q=%p r=%p *p=%d *q=%d *r=%f\n", p, q, r, *p, *q, *r);
free(q);
free(r);

return 0;
}

有人可以帮忙解释下吗?我被弄糊涂了。题目要求画图表示,如果是数字写出数值,如果是指针得画箭,图我可以自己画啦,就是没明白。求高手解释一下,万分感谢。
展开
 我来答
AirStorm
2012-04-09 · TA获得超过242个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:114万
展开全部
代码逐行解释如下:
#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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式