首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组于结构体中整体赋值 与 类型转换 的有关问题

2012-09-07 
数组于结构体中整体赋值 与 类型转换 的问题看了《c专家编程》,目前还有几个问题,先问2个吧。1.数组于结构体

数组于结构体中整体赋值 与 类型转换 的问题
看了《c专家编程》,目前还有几个问题,先问2个吧。
1.数组于结构体中整体赋值:
数组不能单独整体赋值,但却能在结构体(例如仅包含一个数组)中被整体赋值。
测试发现,至少存在某些情况,该数组和对应的结构体占用相同大小的内存。(好吧,其实我就测试了一组)
于是,我想问:这么实现,是基于什么原因呢?

2.类型转换(?是否属于这类问题?)

C/C++ code
#include<stdio.h>int main(void){    if(-1<(unsigned int)1){        puts("-1<1.");    }    else        puts("-1>=1");    return 0;}
结果输出"-1>=1".如果是unsigned char则正常,其实书上那段没看懂。


[解决办法]
if(-1<(unsigned int)1)
比较时应该是将-1也当成unsigned int了, 那么就是FFFFFFFF很大
所以此时-1>1
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

[解决办法]
看看整型提升

Integral Promotion
A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression wherever an integer may be used. If an int can represent all the values of the original type, then the value is converted to int; otherwise the value is converted to unsigned int. This process is called integral promotion.
[解决办法]
比较时 把整形转换成了无符号整形 ,后者的优先级大于前者
[解决办法]
探讨

感谢楼上各位的解答,表示感谢,还有些不懂,如下:
1.只有3L解答了这个问题。我想问的是为什么要这么做?而不是这么做基于什么。
也就是说,既然数组可以通过置于结构体中而整体赋值,那为什么还不允许直接对数组整体赋值?
(如果我表达得不够清楚,烦请再问)

2.(unsigned char)1 时,int能容纳 -1和1,所以都提升为int,比较结果正确;
(unsigned int……

热点排行