1. printf("%5.2s", )
#include <iostream>
using namespace std;
int main() {
printf("%s\n", "string");
printf("%5.3s\n", "string"); //总共打印五个字符,取"string"的前三个字符,右对齐,其余字符用' '占位
printf("%-5.4s\n", "string"); //总共打印五个字符,取"string"的前四个字符,左对齐,其余字符用' '占位
printf("%.5s", "string"); //打印"string"的前五个字符
return 0;
}
打印结果:
2. 二维数组初始化
以下能对二维数组a进行正确初始化的语句是()
A. int ta[2][]={{0,1,2},{3,4,5}};
B. int ta[][3]={{0,1,2},{3,4,5}};
C. int ta[2][4]={{0,1,2},{3,4},{5}};
D. int ta[][3]={{0,,2},{},{3,4,5}};
答案:B
二维数组初始化方式与规则:
• 行能省,列不能省
• 花括号内表示每一行内容,不足用0初始化
int arr[][3] = { {1}, {}, {4, 5, 6} };
• 无花括号,按照初始化列表顺序顺序依次初始化,多余行的其他未初始化部分,初始化为0
int arr[][3] = { 1, 2, 3, 4 };
3. printf函数栈帧调用规则
假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h> int main(){ long long a = 1, b = 2, c = 3; printf("%d %d %d\n", a, b, c); return 0; }
A. 1,2,3
B. 1,0,2
C. 1,3,2
D. 3,2,1
答案:B
3.1 什么是大小端
小端存储(Little Endian):字节或半字节的最低位字节(Least Significant Bit,LSB)存放于内存最低位字节地址上。相反,大端存储表示,低位字节存高位地址
3.2 printf函数栈帧
解析:
• 由于是小端字节序且long long类型站八个字节,十六进制表示下a在内存中的值由低位到高位为01 00 00 00 00 00 00 00,b和c同理;
• printf函数参数入栈从右往左入栈,打印时,由于是%d,于是当作int取栈顶四个字节,于是打印结果为 1 0 2