1.設有定義“int a=3, b,*p=&a;”,則下列語句中使 b不為3的語句是( )
、 b=* &a; 、 b=* p;
、 b=a; 、 b=*a;
2 .設指針x指向的整型變量值為25,則"printf("%d\n",++ *x);"的輸出是( )
、 23 、 24
③ 25 、 26
【解】定義有 int a=3, b,*p=&a;對b賦值的表達式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a。對于后者,又有多種表達方法,通過指向a的指針p,間接引用a的內容,如*p;蛲ㄟ^求地址運算符由變量a得到其指針&a,再由這指針表達式間接引用 a的內容,如* &a。所以表達式*&a、*p和a都能引用變量a的值,而使b的值為3。而表達式。a是錯誤的,因為a不是指針變量,不能對它施行取內容運算符。所以解答是④。
【解】若指針變量x指向某個變量,例如指向變量v,并且變量v的值是25,則表達式++ *x的值是26。這是因為表達式的計算順序可加圓括號表達成(++(*x)),首先是*x,是對X所指變量V的引用,所以++ *X就是++V。++V是先讓變量V增1,并以增至后的V的值為表達式++V的結果,所以其值是 26。所以解答是④。
1.若給fun函數的形參s傳送字符串:"ㄩㄩ 6354abcc"(其中ㄩ表示空格字符),則函數的返回值是__________。
# 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.下面函數要求計算兩個整數X、y之和,并通過形參Z傳回該和值,請?zhí)羁铡?/P>
void add(int x,int y,________z)
{_________=x+ y; return;}
參考答案:
【解】函數fun的第一個for循環(huán)跳過字符串的前導空白符,接著分析第一個非空白符是否是負號,若是置變量sign為 -1;否則,置變量sign為1。接著的if語句在第一個非空白字符是負號或正號時,跳過該字符。以后的for循環(huán)將后面的數字符當作十進制數的各位數字譯出一個長整數n。遇字符a時,結束譯數循環(huán)。最后,函數返回sign與n的乘積。所以若調用函數時提供的實參是"ㄩㄩ6354abc",函數返回值是整數6354。
【解】函數希望通過形參z傳送結果,形參z必須是指針類型的,由于返回整型結果,所以z的說明是int *z。函數返回前必須先把結果通過形參z間接引用(寫成* z)傳回。
相關推薦:考試吧策劃:2010年軟件水平考試完全指南北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |