• <th id="ix9b8"></th>
    1. <tbody id="ix9b8"><noscript id="ix9b8"></noscript></tbody><li id="ix9b8"><object id="ix9b8"><u id="ix9b8"></u></object></li>
      1. <li id="ix9b8"><acronym id="ix9b8"></acronym></li>
      2. 全國計算機等級考試二級C語言復習資料 - 下載本文

        聰智學校

        {char x[]=”STRING”; x[0]=0;x[1]=?\\0?;x[2]=?0?;

        printf(“%d %d\\n”,sizeof(x),strlen(x)); }程序運行后的輸出結果是(B) A)6 1 B)7 0 C)6 3 D)7 1

        【解析】經過x[0]=0;x[1]=?\\0?;x[2]=?0?;后,x[]=”0\\00ING”。strlen測字符串的實際長度,不含字符串結束標志?\\0?,故strlen(x)為0。sizeof測字符串所占的存儲空間,包含字符串結束標志,故sizeof(x)為7。 例2:(2010-09-33)有以下程序 #include #include main()

        {char a[20]=”ABCD\\0EFG\\0”,b[]=”IJK”; strcat(a,b); printf(“%s\\n”,a); }程序運行后的輸出結果是(B)

        A)ABCDE\\0FG\\0IJK B)ABCDIJK C)IJK D)EFGIJK

        【解析】把字符數組b中的字符串連接到字符數組a中字符串的后面,并刪去字符串a后的第一個字符串結束標志?\\0?。故輸出結果為ABCDIJK。 例3: (2010-09-31)下列選項中,能夠滿足“若字符串s1等于字符串s2,則執行ST”要求的是 (A) A)if(strcmp(s2,s1)==0)ST; B)if(s1==s2)ST; C)if(strcpy(s1,s2)==1)ST; D)if(s1-s2==0)ST; 【解析】若字符串s1等于字符串s2,strcmp(s2,s1)==0,故答案是A。

        第四課 指針

        第 36 頁 共 81 頁

        聰智學校

        本課重要知識點:

        1.知識點:指針的概念與指針變量

        ? 指針就是地址。指針變量是用來存儲地址,而一般變量是用來存儲數值。 例1.(09-09-26)有如下程序輸出結果為 1,2,2,1 #include main() { }

        【解析】p、q為指針,初始化時p指向m,q指向n。執行r=p ;p=q ;q=r ;p和q的值交換,從而p指向n,q指向m。指針的改變不會應用m、n的值,最后輸出*p和*q的值分別為n、m的值。

        int m=1,n=2,*p=&m,*q=&n,*r; r=p ;p=q ;q=r ;

        printf(“%d,%d,%d,%d\\n”,m,n,*p,*q) ;

        2.知識點:指針的引用

        ? 指針的引用是通過兩個運算符實現“&”和“*”實現的

        &是取地址符號,它的一半格式是:&變量名。例如:int i ; &i表示取i的地址。 *是取值運算符,它的一般格式:*指針變量名。例如:int i=10,*p=&i; *p表示取i的值10

        例1.(2011-09-25)若定義語句:int year=2009,*p=&year;,以下不能使變量year中的值增至2010的語句是 (D)

        A.*p+=1;

        B.(*p)++;

        C.++(*p);

        D.*p++;

        【解析】*和++同級別,按自左向右的結合方向,因此D選項可轉變為*(p++),從而只是使指針發生移動,而不能將p所指變量增1 例2.(06—04—24)若有說明語句:double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是 (D) A)*p=&a; scanf(\%lf\,p); B)*p=&a; scanf(\%f\,p); C)p=&a; scanf(\%lf\,*p);

        第 37 頁 共 81 頁

        聰智學校

        D)p=&a; scanf(\%lf\,p);

        【解析】對于scanf函數,輸入數據列表必須是合法地址表達式(可以使地 址常量、指針),A選項、B選項*使用錯誤。

        例3.(09-03-16)若有定義語句 doule x,y,*px,*py;執行了px=&x;py=&y;之后,正確的輸入語句是(C)

        A) scanf(\%f%f\ C) scanf(\%f%le\

        B) scanf(\%f%f\D) scanf(\%lf%lf\

        【解析】A,D選項中的x,y缺少取地址符,B項中&x之前缺少逗號,格式不正確。

        3.知識點:指針變量的初始化

        ? 指針變量在使用前必須要初始化,把一個具體的地址賦給它,否則引用時會出錯,如果不指向任何數據就賦“空值”NULL。 ? 指針變量兩種初始化方法:方法一:int a=2,*p=&a;(定義的同時初始化)

        方法二:int a=2,*p;p=&a;(先定義后初始化)

        例1.(07—04—29)設已有定義:float x;則以下對指針變量P進行定義且賦初值的語句中正確的是 (D) A)float *p=1034; B)int *p=(float)x; C)float p=&x; D)float *p=&x;

        【解析】可以給一個指針賦值的只能是一個與該指針同類型的指針(或地址值);故A、B選項錯誤;C選項聲明指針出錯,P前面的指針說明符*不能省略。

        4.知識點:指針的運算

        ? *p++和(*p)++之間的差別:*p++是地址變化,(*p)++是指針變量所指的數據變化。一個指針變量加一個整數不是簡單的數學相加,而是連續移動若干地址。當兩

        個指針指向同一數組時,它們可以比較大小進行減法運算。

        例如:int a[10],*p; p=a; p++;表示p移動一個存儲單元,p指向a[1],只有當指著指向數組元素時,指針的運動才有意義。

        5:知識點:指針與數組

        ? 指針與一維數組

        數組名代表數組的首地址。一維數組中,第一個元素的地址即為該數組的起始地址。建立指針變量與一維數組的聯系: 例如: int a[6],*pa; pa=a;或pa=&a[0];

        第 38 頁 共 81 頁

        聰智學校

        說明:①數組名a代表該數組的首地址,也即a[0]的地址。

        ② pa=a;或pa=&a[0];使pa保存了數組a的首地址,pa,a,&a[0]都指向一個地址。 ③以上操作可等價于 int a[6],*pa=a;

        ④如果pa=&a[3];表示*pa的值就是a[3]的地址。

        注意:數組a是一個地址常量,它永遠指向數組的首地址,不能重新賦值。因此 a=&i;或a++都是錯誤的。 例1.(08—04—23)有以下程序 #include main()

        {int a[]={1,2,3,4),y,*p=&a[3]; --p;y=*p;printf(\%d\\n\; } 程序的運行結果是(D) A)y=0 B)y=l C)y=2 D)y=3

        【解析】程序中定義一個一維數組,并初始化,再一定義了一變量和一個指針(將指針指向數組下標為3的一個元素),執行--p;(注意,當指針指一個元素后,指針變量加上“*”時,表示引用的是元素的值,當不加“*“時表示引用的是地址),向前移動一個位置,指向a[2],y=+p;(將p指針指向的值3賦給變量y),輸出y的值為3。

        例2.(11-03-24)設有定義:double x[10],*p=x;,以下能給數組x下標為6的元素讀入數據的正確語句是( C ) A)scanf(\ B)scanf(\ C)scanf(\ D)scanf(\

        【解析】數組名是數組的首地址,p=x,指針p指向數組的首地址,要表示數組x下標為6的元素的地址可以有&x[6],x+6,p+6,&p[6],scanf后面的參數列表必須是地址列表,B中*(x+6)D中p[6]都是取數組x下標為6的元素的值,A中格式控制符%f與double類型不匹配,所以選C。

        6.知識點:用指針訪問數組元素

        ? 通過指針引用數組元素

        例如:int *p,a[5];

        p=&a[0];

        第 39 頁 共 81 頁

        說明:①指針變量p指向了數組元素a[0],可以使用訪問運算符“*”來引用變量a[0];

        聰智學校

        例:*p=18;等價于a[0]=18;

        ②*(p+1)表示a[1] p+1表示&a[1]

        ? 通過數組的首地址引用數組元素

        例如:int a[5];

        說明:①a是數組名,表示收地址,可以把a當做一個指針常量。

        ②*a等價與a[0],*(a+1)等價與a[1];a等價于&a[0],a+1等價與&a[1];

        ? 用帶下標的指針變量引用一維數組元素

        例如:int *p,a[5]; p=a;

        說明:①p[0]表示p指針指向的內存單元,p[1]表示p指向的內存單元

        ②a[i]的等價引用方法:a[i]、p[i]、*(a+i)、*(p+i)

        ③a[i]的地址等價引用方法:&a[i]、&p[i]、a+i、p+i 例1.(09-03—29)若有以下定義 int x[10],*pt=x;

        則對x數組元素的正確應用是 B A)*&x[10] B)*(x+3) C)*(pt+10) D)pt+3

        【解析】引用數組元素時,注意取地址運算符&與指針運算符t的作用;指針運算符+用來取得指針變量所指存儲空間的內容,取地址運算符&用來取得變量的地址值;A選項數組下標越界;B選項中+(x+3)等價于元素X[3];C選項中。(pt+10)等價于x[10],數組下標越界;D選項pt+3是元素x[3]的地址,與&x[3]等價;故正確答案是B。正確答案:B 例1.(2011-09-27)有以下程序 #include void fun(int *p) {printf(“%d\\n”,p[5]);}

        第 40 頁 共 81 頁





        午夜夫妻一级生活片,一级毛片免费完整视频,日本三级香港三级人妇