Jeff的錯題集(三):刷到懷疑人生!

2020-08-11 21:02:51

題一、
struct Student
{
int num;
double score;
};
Student stu[3]={{1001,80}, {1002,75}, {1003,91}}, *p=stu;

則下面 下麪參照形式錯誤的是()。
正確答案: B 你的答案: D (錯誤)
p->num
(p++).num
(p++)->num
(*p).num
解答:運算子-> 相當於運算子 *.
即p->num與(*p).num等價
題三:
有以下結構體說明和變數的定義,且指針p指向變數a,指針q指向變數b。則不
能把結點b連線到結點a之後的語句是()。
struct node
{
char data;
struct node *next;
} a,b,*p=&a,*q=&b;

正確答案: B 你的答案: D (錯誤)
a.next=q;
p.next=&b;
p->next=&b;
(*p).next=q;
解答:
p是一指向結構體型別的指針變數,其初始值是讓其指向結構體變數a,要通
過指針變數p來參照結構體變數的成員next,通常可使用兩種形式:p->next 或(*p).next,
而p.next是非法的參照。故選擇答案是B。

題四:
與宣告:char str[10]={‘a’,’b’,’c’,’\0’};相等的宣告是
正確答案: D 你的答案: A (錯誤)
char str[10]=「abc\0」;
char *str=「abc」;
char str[]=「abc」;
char str[10]=「abc」;
解答:
選D。
題幹中:在字元陣列char str[10]={‘a’,’b’,’c’,’\0’},’\0’是字元結束符,所以是一個包含a、b、c三個元素,陣列型別大小爲10的陣列。
在这里插入图片描述
選項中:
A 包含兩個結束符佔空間,顯示的abc\0佔4個空間,隱式\0佔1個空間。與題幹不符,排除。
B 指針變數型別爲8,與題幹不符,排除。
C 動態陣列型別,由元素個數決定大小,結果爲4,與題幹不符,排除。
D 包含隱含字元’\0’,結束符,和abc三個元素,共佔4個空間,和題幹相同。所以D正確。
在这里插入图片描述
題五:
32位元系統中,如下程式執行的結果是( )。
#include <stdio.h>
main()
{
char *p=「abcdefgh」,*r;
long *q;
(a) =(long *)p;
q++;
(b) = (char *)q;
printf(「%1s\n」,r);
}
解答:
sizeof(char) 等於 1,sizeof(long) 等於4.
q++; // 指向的地點 加了 4 bytes,也就是 越過了 abcd
r=(char *)q; // 把現在q 指向的地點 給 char r 指針,作爲 r 指針的首地址。
printf("%s",r); // 按字元形式 打出: efgh