C/C++笔试错题集+图解知识点(一)—— 持续更新中

1. printf("%5.2s", )

#include 
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;
}

打印结果:

C/C++笔试错题集+图解知识点(一)—— 持续更新中_第1张图片

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} };

C/C++笔试错题集+图解知识点(一)—— 持续更新中_第2张图片

• 无花括号,按照初始化列表顺序顺序依次初始化,多余行的其他未初始化部分,初始化为0

	int arr[][3] = { 1, 2, 3, 4 };

C/C++笔试错题集+图解知识点(一)—— 持续更新中_第3张图片

 3. printf函数栈帧调用规则

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include 
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)存放于内存最低位字节地址上。相反,大端存储表示,低位字节存高位地址

C/C++笔试错题集+图解知识点(一)—— 持续更新中_第4张图片

3.2 printf函数栈帧

C/C++笔试错题集+图解知识点(一)—— 持续更新中_第5张图片

 解析:

• 由于是小端字节序且long long类型站八个字节,十六进制表示下a在内存中的值由低位到高位为01 00 00 00 00 00 00 00,b和c同理;

• printf函数参数入栈从右往左入栈,打印时,由于是%d,于是当作int取栈顶四个字节,于是打印结果为 1 0 2

你可能感兴趣的:(笔试/面试,c++,c语言,开发语言)