第1题
🎗有如下代码
char acHello[] = "hello\0world"; char acNew[15] = {0}; strcpy(acNew,acHello);
则 strlen(acNew) =_____________, sizeof(acHello) = ______________
📝 分析:
1️⃣ strlen:计算字符串的长度,遇 \0 停止,且不包括 \0
2️⃣ sizeof:计算变量所占的内存大小,单位 (字节),包括 \0
3️⃣ strcpy:拷贝字符串,遇到 \0 就停止拷贝
所以 strlen(acNew) = 5;sizeof(acHello) = 12
第2题
🎗下列程序执行后, n 的值等于____
char a[20]; char *p1 = (char *)a; char *p2 = (char*)(a+5); int n = p2-p1;
A. 4
B. 5
C. 10
D. 20
📝 分析:
此题考查指针的运算
在同一块空间内一个指针 - 另一个指针得到的是两个指针之间的元素个数
⚠ 注意
1️⃣ 指针的相减运算只能在同一块空间
2️⃣ 两指针不能相加、乘、除,这是标准未定义的
所以选择 B
第3题
🎗下列程序运行后的输出结果是____
#define F(X,Y) ((X)+(Y)) int main() { int a = 3,b = 4; printf("%d\n",F(a++, b++)); }
A. 7
B. 8
C. 9
D. 10
📝 分析:
因为 a 和 b 都是后置++,所以 x = 3, y = 4
所以选择 A
第4题
🎗执行 x = 5 > 1 + 2 && 2 || 2 * 4 < 4 - !0 后, x 的值为____
A. -1
B. 0
C. 1
D. 5
📝 分析:
所以选择 C
第5题
🎗执行以下代码后,a = __ ;b = __ ;c = __ ;d = __ ;
int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
📝 分析:
⚠ 注意
1️⃣ &&,同真为真,其余为假
2️⃣ ||,同假为假,其余为真
3️⃣ 表达式中:对于 && , 只要有一个为假,其余都为假,且后面部分表达式不参与计算;对于 ||,只要有一个为真,其余都为真,且后面部分表达式不参与计算
所以 a = 1 ;b = 2 ;c = 3 ;d = 4 ;