1.設(shè)有定義“int a=3, b,*p=&a;”,則下列語句中使 b不為3的語句是( )
① b=* &a; ?、?b=* p;
③ b=a; ?、?b=*a;
2 .設(shè)指針x指向的整型變量值為25,則"printf("%d\n",++ *x);"的輸出是( )
① 23 ?、?24
③ 25 ?、?26
【解】定義有 int a=3, b,*p=&a;對b賦值的表達(dá)式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a。對于后者,又有多種表達(dá)方法,通過指向a的指針p,間接引用a的內(nèi)容,如*p?;蛲ㄟ^求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用 a的內(nèi)容,如* &a。所以表達(dá)式*&a、*p和a都能引用變量a的值,而使b的值為3。而表達(dá)式。a是錯誤的,因為a不是指針變量,不能對它施行取內(nèi)容運(yùn)算符。所以解答是④。
【解】若指針變量x指向某個變量,例如指向變量v,并且變量v的值是25,則表達(dá)式++ *x的值是26。這是因為表達(dá)式的計算順序可加圓括號表達(dá)成(++(*x)),首先是*x,是對X所指變量V的引用,所以++ *X就是++V。++V是先讓變量V增1,并以增至后的V的值為表達(dá)式++V的結(jié)果,所以其值是 26。所以解答是④。
1.若給fun函數(shù)的形參s傳送字符串:"ㄩㄩ 6354abcc"(其中ㄩ表示空格字符),則函數(shù)的返回值是__________。
# include
long fun(char s[])
{ long n;int sign;
for(; isspace(*s); s++);
sign=(*s==’-’ )?-1:l;
if(*s==’+’ ||*s==’-’) s++;
for(n=0; isdigit(*s); s++) n=10*n+(*s-’0’);
return sign *n;
}
2.下面函數(shù)要求計算兩個整數(shù)X、y之和,并通過形參Z傳回該和值,請?zhí)羁铡?BR> void add(int x,int y,________z)
{_________=x+ y; return;}
參考答案:
【解】函數(shù)fun的第一個for循環(huán)跳過字符串的前導(dǎo)空白符,接著分析第一個非空白符是否是負(fù)號,若是置變量sign為 -1;否則,置變量sign為1。接著的if語句在第一個非空白字符是負(fù)號或正號時,跳過該字符。以后的for循環(huán)將后面的數(shù)字符當(dāng)作十進(jìn)制數(shù)的各位數(shù)字譯出一個長整數(shù)n。遇字符a時,結(jié)束譯數(shù)循環(huán)。最后,函數(shù)返回sign與n的乘積。所以若調(diào)用函數(shù)時提供的實參是"ㄩㄩ6354abc",函數(shù)返回值是整數(shù)6354。
【解】函數(shù)希望通過形參z傳送結(jié)果,形參z必須是指針類型的,由于返回整型結(jié)果,所以z的說明是int *z。函數(shù)返回前必須先把結(jié)果通過形參z間接引用(寫成* z)傳回。
① b=* &a; ?、?b=* p;
③ b=a; ?、?b=*a;
2 .設(shè)指針x指向的整型變量值為25,則"printf("%d\n",++ *x);"的輸出是( )
① 23 ?、?24
③ 25 ?、?26
【解】定義有 int a=3, b,*p=&a;對b賦值的表達(dá)式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a。對于后者,又有多種表達(dá)方法,通過指向a的指針p,間接引用a的內(nèi)容,如*p?;蛲ㄟ^求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用 a的內(nèi)容,如* &a。所以表達(dá)式*&a、*p和a都能引用變量a的值,而使b的值為3。而表達(dá)式。a是錯誤的,因為a不是指針變量,不能對它施行取內(nèi)容運(yùn)算符。所以解答是④。
【解】若指針變量x指向某個變量,例如指向變量v,并且變量v的值是25,則表達(dá)式++ *x的值是26。這是因為表達(dá)式的計算順序可加圓括號表達(dá)成(++(*x)),首先是*x,是對X所指變量V的引用,所以++ *X就是++V。++V是先讓變量V增1,并以增至后的V的值為表達(dá)式++V的結(jié)果,所以其值是 26。所以解答是④。
1.若給fun函數(shù)的形參s傳送字符串:"ㄩㄩ 6354abcc"(其中ㄩ表示空格字符),則函數(shù)的返回值是__________。
# include
long fun(char s[])
{ long n;int sign;
for(; isspace(*s); s++);
sign=(*s==’-’ )?-1:l;
if(*s==’+’ ||*s==’-’) s++;
for(n=0; isdigit(*s); s++) n=10*n+(*s-’0’);
return sign *n;
}
2.下面函數(shù)要求計算兩個整數(shù)X、y之和,并通過形參Z傳回該和值,請?zhí)羁铡?BR> void add(int x,int y,________z)
{_________=x+ y; return;}
參考答案:
【解】函數(shù)fun的第一個for循環(huán)跳過字符串的前導(dǎo)空白符,接著分析第一個非空白符是否是負(fù)號,若是置變量sign為 -1;否則,置變量sign為1。接著的if語句在第一個非空白字符是負(fù)號或正號時,跳過該字符。以后的for循環(huán)將后面的數(shù)字符當(dāng)作十進(jìn)制數(shù)的各位數(shù)字譯出一個長整數(shù)n。遇字符a時,結(jié)束譯數(shù)循環(huán)。最后,函數(shù)返回sign與n的乘積。所以若調(diào)用函數(shù)時提供的實參是"ㄩㄩ6354abc",函數(shù)返回值是整數(shù)6354。
【解】函數(shù)希望通過形參z傳送結(jié)果,形參z必須是指針類型的,由于返回整型結(jié)果,所以z的說明是int *z。函數(shù)返回前必須先把結(jié)果通過形參z間接引用(寫成* z)傳回。