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;
}
有人可以帮忙解释下吗?我被弄糊涂了。题目要求画图表示,如果是数字写出数值,如果是指针得画箭,图我可以自己画啦,就是没明白。求高手解释一下,万分感谢。 展开
#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;
}
有人可以帮忙解释下吗?我被弄糊涂了。题目要求画图表示,如果是数字写出数值,如果是指针得画箭,图我可以自己画啦,就是没明白。求高手解释一下,万分感谢。 展开
1个回答
展开全部
代码逐行解释如下:
#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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询