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

替神马这样都可以!

2013-12-13 
为神马这样都可以!!!楼主今天本来犯二了,但是在犯二期间发现 int char 型没分清楚,而且形参里地址不加*都

为神马这样都可以!!!
替神马这样都可以!
楼主今天本来犯二了,但是在犯二期间发现 int char 型没分清楚,而且形参里地址不加*都可以正常运行。。。替神马这样都可以!
btw 楼主犯的二是在结构数组作形参的时候光秃秃一个形参名上去了,既没*也没【】,然后还拿上面这个奇葩的玩意儿作类比。。。
但是呢,上面那个改成替神马这样都可以!
就不行了。唉,真心奇葩替神马这样都可以!
[解决办法]
当然了,int占用4个字节,指针也占用四个字节,这样刚好,但是应该有警告的,换成char就不行了,因为char只有一个字节,跟指针大小不一样,所以就出错了。
[解决办法]

引用:
因为用char做形参类型,而实际要传一个指针,而编译器对char做了扩展,是用0扩展的。

++

实际是指针转换成char 被截断
然后,char 转换成 int 传入函数(0扩展,或者符号位扩展)

很多编译器 char 缺省是 signed char . 只能符号扩展。
但是不是绝对的,至少可以设置为 unsigned char .此时0扩展
不管如何扩展,结果都面目全非了。

而函数内部,又把参数看作char 了,此时,刚刚扩展的参数又被截断。
然后此char 又一次扩展传入printf 函数
printf根据 %s判断,格式化串后的第一个参数是个指针,

对于32Bits系统,指针可能是4字节的。

于是所有4字节,组合起来看作指针,除了低字节。
其他3个字节,都是错误的(其他字节,非零即FF)。



热点排行