c语言内存分配,大家来帮忙下

leecyz 2010-03-03 08:23:49
int c;

scanf("%c",&c);

printf("%d\n",c);

先定义int类型,分配4个字节空间。scanf为字符型,输入一个字节空间数据。
再已整形输出c。

请教输出的是不是整形c在内存中的值。其他三个字节的内容是怎么样的,随机分配的,还是全都是0x00?
能说详细点更好。
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
WEI5611576 2010-03-03
  • 打赏
  • 举报
回复
这个细说的话有点复杂,你先向计算机中输入的是一个字符,这个字符char以二进制的方式存储在类存中(占8个字节),再将这个char型值赋给int型的c,就涉及赋值类型转换,将char型数据赋给int型变量时,若字符对应二进制的最高位为0,则高24位补0,如最高位为1,则高24位补1,再将补过后的二进制转换成十进制,就是我们用的数了,输出的也是它。你可以试一下。
cy330206 2010-03-03
  • 打赏
  • 举报
回复
给分吧,,,,嘿嘿。。。。
leecyz 2010-03-03
  • 打赏
  • 举报
回复
引用 5 楼 cy330206 的回复:
这个要看你编译器的啊,我地方用的是VC++,这个编译器初始化时是CCCCCCCC,因为char是一个字节8位的,所以输入的地方就读进来最先输入的一个字节,输出的数是CCCCCCxx(xx就是那个字节)

谢了
leecyz 2010-03-03
  • 打赏
  • 举报
回复
引用 9 楼 harizu76 的回复:
如果INT不全部占满。只占1个以下。那可以全部转换成CHAR型
大于2个。那INT有些高位数据会丢失。只保留低位给CHAR写错了


恩 应该是这样。
xdjy1987 2010-03-03
  • 打赏
  • 举报
回复
用的是vc++6.0
int c;

scanf("%c",&c);

printf("%d\n",c);

输入c,输出时-858993565
harizu76 2010-03-03
  • 打赏
  • 举报
回复
如果INT不全部占满。只占1个以下。那可以全部转换成CHAR型
大于2个。那INT有些高位数据会丢失。只保留低位给CHAR

写错了
ProgBelief 2010-03-03
  • 打赏
  • 举报
回复
如果c是局部变量(在栈上分配空间),那么其内容应该是不确定的,也就是c的输出是随机的。
harizu76 2010-03-03
  • 打赏
  • 举报
回复
字符型要转换成%D这种情况吧

如果INT占4个字节。CHAR占一个字节。 INT>CHAR内存所占字节大小空间。CHAR内容完全可以转换成INT
但反过来。把INT转换成CHAR型就要看了
如果INT不全部占满。只占2个以下。包括2个内容字节空间。那可以全部转换成CHAR型。

大于3个。那INT有些高位数据会丢失。只保留低位给CHAR
cy330206 2010-03-03
  • 打赏
  • 举报
回复
建议楼主去结贴去一下。。。。呵呵
cy330206 2010-03-03
  • 打赏
  • 举报
回复
这个要看你编译器的啊,我地方用的是VC++,这个编译器初始化时是CCCCCCCC,因为char是一个字节8位的,所以输入的地方就读进来最先输入的一个字节,输出的数是CCCCCCxx(xx就是那个字节)
xdjy1987 2010-03-03
  • 打赏
  • 举报
回复
期待高手讲解。 回复内容太短了!
leecyz 2010-03-03
  • 打赏
  • 举报
回复
char c;
scanf("%d",&c);
printf("%d\n",c);
这种情况又如何理解?
leecyz 2010-03-03
  • 打赏
  • 举报
回复
引用 1 楼 lzh3ng 的回复:
楼主,类型不匹配啊。int c;scanf("%c",&c);


并不影响编译执行,我只是需要理解内容如何分配而已。

lzh3ng 2010-03-03
  • 打赏
  • 举报
回复
楼主,类型不匹配啊。
int c;

scanf("%c",&c);

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧