1.有以下程序,程序的输出的结果 B
int main()
{
int a =666,b = 888;
printf("%dn",a,b);
}
A 错误信息
B 666
C 888
D 666,888
解:
printf函数参数的入栈顺序是从右到左(888先入栈,接着666入栈)。所以从栈里面读取一个数据时,指挥读取最后入栈的数据,也即是666
2.如下c程序,在64位处理器上运行后sz的值是
A 24
B 20
C 16
D 14
E 13
F 12
解:
(1)struct的对齐原则,注意不同的编译器有不同的效果
(2)不同的数据类型在32位和64位下所占的字节数区别
32位编译器:
char :1个字节
char * :4个字节
short int : 2个字节
unsigned int: 4个字节
float:4个字节
long:4个字节
double:8个字节
long long :4个字节
64位编译器:
char :1个字节
short int : 2个字节
unsigned int: 4个字节
float:4个字节
long:8个字节
double:8个字节
long long :8个字节
unsigned long :8个字节
3.关于printf的知识点
(1)printf默认是右对齐
(2)printf和scanf是库函数,不是语句
(3)函数包括函数头、大括号、函数体三部分,函数体是可执行部分,而赋值语句只能放到函数体里
(4)printf输出的数据不仅受输出域宽和小数域宽限制,也受数据在内存中存储精度影响