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

一个关于C语言的奇怪有关问题

2012-03-01 
一个关于C语言的奇怪问题在TC2.0下运行这两个程序出现的结果不同,原因是什么,请各位帮忙解释一下程序一:ma

一个关于C语言的奇怪问题
在TC2.0下运行这两个程序出现的结果不同,原因是什么,请各位帮忙解释一下
程序一:
main()
        {long   a=0x12345678;
          printf( "%c\n ",a);
          printf( "%d\n ",a);
          printf( "%ld\n ",a);
        }
运行结果为:
x
22136;
305419896
这个是可以理解的!
程序二:
main()
        {long   a=0x12345678;
          printf( "%c\n%d\n%ld\n ",a,a,a);
        }
运行结果为:
x
4660
305419896
这个就不好理解了,请高手解释一下。

[解决办法]
mark.
[解决办法]
首先,在 TC 中,内存是按照 16 位来对齐的。
另外, C 对可变参数的实现就是全部推到堆栈中,实现那边决定怎样解释堆栈中的参数。

对第一种情况堆栈内容和解释方式为:

0x78 -> %c -\ --
0x56 -/ %d \ %ld
0x34 /
0x12 --


对第二种情况:

0x78 --> %c
0x56 ----------对齐补位
0x34 --\
0x12 --/ %d
0x78 --\
0x56 \ %ld
0x34 /
0x12 --/
0x78
0x56
0x34
0x12


[解决办法]
顶。。。
[解决办法]
关键是 第二个
0x78 --> %c
0x56 ----------对齐补位//因为是16位对齐,
0x34 --\ //把56填充在78下面
0x12 --/ %d //而%d是16位整取,
0x78 --\ //所以只可能去1234了
0x56 \ %ld
0x34 /
0x12 --/
0x78
0x56
0x34
0x12

[解决办法]
用sizeof()看一下long, int , char, 各占了几个字节就知道为什么错了啊


[解决办法]
有难度的,学习一下
[解决办法]
"茴"字有几种写法并不重要.```
[解决办法]
知道原理就可以了,X的ASIC是120

热点排行