6.根據(jù)下面的定義,能打印出字母M的語句是( )
struct person {char name[9]; int age; };
struct person c[1O] = {{“John”,17 },{“Paul”,19 },{“Mary”,18 },{“Adam”,16 }};
① printf(“%c”, c[3].name); ② printf(“%c”, c[3].name[1] );
③printf(“%c”,c[2].name[1]); ④printf(“%c”,c[2].name[0] );
「解」結(jié)構(gòu)類型struct person有兩個成分:九個元素的字符數(shù)組name和一個基本整型age元素類型為 struct person的數(shù)組c有10個元素,其中前四個元素被設(shè)定了初值。在已設(shè)定初值的元素中,只有c[2].mame[0]的值是字符M.其余元素及元素的成分都不是字符比正確解答是④。
7.設(shè)有如下定義,則對data中的a成員的正確引用是( )
struct sk{int a;float b;} data,*p= data;
①(*p)。data.a ②(*p)。a ③ p - data.a ④ p.data.a
「解」結(jié)構(gòu)變量data有兩個成分a和b.結(jié)構(gòu)指針變量p指向結(jié)構(gòu)變量data.引用結(jié)構(gòu)變量data的成分a有兩種方法:一是直接由變量data引用其自己的成分a,寫成data.a;二是通過指針變量p引用它所指的結(jié)構(gòu)的成分a,這又有兩種寫法,分別是p - a和(*p)。a.正確解答是②。
7.2 填充題
1.運算符“?!狈Q為__________運算符,運算符“ - ”稱為__________運算符。
「解」引用結(jié)構(gòu)變量或共用型變量的成分用成員運算符‘?!?,若某指針指向一個結(jié)構(gòu)變量或共用型變量,通過指針引用它所指變量的成分用指向成員運算符‘ - ’。
2.設(shè)有定義“struct {int a; float b; char c;} abc,*p_abc= abc;”,則對結(jié)構(gòu)體成員a的引用方法可以是abc_________a和p_abc___________a.
「解」若有結(jié)構(gòu)變量abc有成分a,并有指針p_abc指向結(jié)構(gòu)變量abc,則引用變量abc成分a的標(biāo)記形式有abc.a和p_abc - a.
3.若有以下說明和定義語句,則變量W在內(nèi)存中所占的字節(jié)數(shù)是__________.
union aa {float x;float y; char c[6]; };
struct st { union aa v; float w[5]; double ave; } w;
「解」共用型aa有三個成分,一個是float型成分x,一個是float型成分y,再一個是有六個元素的字符數(shù)組。若float型數(shù)據(jù)占4個字節(jié),則類型aa數(shù)據(jù)要占用6個字節(jié)。結(jié)構(gòu)變量w有三個成分,一個是共用型成分aa,要占用6個字節(jié);一個是有5個float型元素的數(shù)組w,要占用20個字節(jié);再一個是double型的ave.若doube型數(shù)據(jù)要8個字節(jié),則結(jié)構(gòu)變量w要占用34個字節(jié)。
7.3 程序分析題
1.閱讀下列程序,寫出運行結(jié)果。(字符0的ASCII碼為十六進制的30)
main()
{ union { char c; char i[4]; } z;
z.i[0]= 0x39;z.i[1]= 0x36;
printf(“%c \n”, z.c);
}
「解」共用型變量z有兩個成分,一個是字符型的c,另一個是有4個字符的數(shù)組i.由于共用型的成分是覆蓋存儲,成分c的內(nèi)容也是成分i的首元素。程序給Z的i成分的首元素置十六進制代碼0x39,即十進制數(shù)57.數(shù)57是字符‘9’的ASCII代碼。用字符輸出格式,輸出該變量的值,將輸出字符‘9’ .