C语言数组和地址问题

#include<stdio.h>intmain(){charc[4]={8,2,0,0};int*p;p=(int*)c;printf("%d",*p);}为什么输出会... #include<stdio.h>
int main(){
char c[4]={8,2,0,0};
int *p;
p=(int*)c;
printf("%d",*p);
}
为什么输出会是520啊,期望大神解答
展开
 我来答
最大的宝宝
2020-03-16 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:410万
展开全部


1、字符数组c在内存中占用4个字节,值分别为8,2,0,0

2、强制转换后,整型指针p指向这个字符数组的起始位置(当前情形为值8所在的那个地址)

3、在小端格式下,p指向的整数被解释为00000208。这个16进制值(208)对应10进制值520。

这里的16进制表示只是为了便于显示,大家都知道实际上是以2进制存储的,学东西要灵活一些。你最好用调试器自己看一下,这比别人讲十遍都管用

匿名用户
2020-03-19
展开全部

大宝宝 解释得真详细!


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杨政java
2020-03-16 · 超过24用户采纳过TA的回答
知道答主
回答量:107
采纳率:81%
帮助的人:21.1万
展开全部

追答
这是二进制,转换为10进制就是2^9+2^3=520
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2020-03-16 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:807万
展开全部
字节是低位先存 换成16进制是0x208
2x256+8 512十8=520
追问
其他都懂了,只是为什么这时候换成了16进制啊
追答
16进制好看啊  两位表示一字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灰白色回
2020-03-16 · 超过98用户采纳过TA的回答
知道小有建树答主
回答量:374
采纳率:78%
帮助的人:18.6万
展开全部
你用一个整形的指针指向字符形的变量,这种行为本身就不正确。
你不用太关注结果是什么,只需要知道指针不能这么用就好了。
追问
老师要我们讲原理,没法呀,大佬能不能讲一下为什么啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式