首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網絡編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質量工程師 | 物業(yè)管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師
設備監(jiān)理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > C語言 > 復習資料 > 正文

二級C輔導教程及考點分析:第六章 指針

    2.指針變量的運算

    (1)賦值運算

    指針變量的賦值運算有以下幾種形式:
    ①指針變量初始化賦值,前面已作介紹。

    ②把一個變量的地址賦予指向相同數(shù)據(jù)類型的指針變量。例如:
    int a,*pa;
    pa=&a; /*把整型變量a的地址賦予整型指針變量pa*/

    ③把一個指針變量的值賦予指向相同類型變量的另一個指針變量。如:
    int a,*pa=&a,*pb;
    pb=pa; /*把a的地址賦予指針變量pb*/
    由于pa,pb均為指向整型變量的指針變量,因此可以相互賦值。

    ④把數(shù)組的首地址賦予指向數(shù)組的指針變量。
    例如: int a[5],*pa;
    pa=a; (數(shù)組名表示數(shù)組的首地址,故可賦予指向數(shù)組的指針變量pa)
    也可寫為:
    pa=&a[0]; /*數(shù)組第一個元素的地址也是整個數(shù)組的首地址,
    也可賦予pa*/
    當然也可采取初始化賦值的方法:
    int a[5],*pa=a;

    ⑤把字符串的首地址賦予指向字符類型的指針變量。例如: char *pc;pc="c language";或用初始化賦值的方法寫為: char *pc="C Language"; 這里應說明的是并不是把整個字符串裝入指針變量, 而是把存放該字符串的字符數(shù)組的首地址裝入指針變量。 在后面還將詳細介紹。

    ⑥把函數(shù)的入口地址賦予指向函數(shù)的指針變量。例如: int (*pf)();pf=f; /*f為函數(shù)名*/

    (2)加減算術運算

    對于指向數(shù)組的指針變量,可以加上或減去一個整數(shù)n。設pa是指向數(shù)組a的指針變量,則pa+n,pa-n,pa++,++pa,pa--,--pa 運算都是合法的。指針變量加或減一個整數(shù)n的意義是把指針指向的當前位置(指向某數(shù)組元素)向前或向后移動n個位置。應該注意,數(shù)組指針變量向前或向后移動一個位置和地址加1或減1 在概念上是不同的。因為數(shù)組可以有不同的類型, 各種類型的數(shù)組元素所占的字節(jié)長度是不同的。如指針變量加1,即向后移動1 個位置表示指針變量指向下一個數(shù)據(jù)元素的首地址。而不是在原地址基礎上加1。
    例如:
    int a[5],*pa;
    pa=a; /*pa指向數(shù)組a,也是指向a[0]*/
    pa=pa+2; /*pa指向a[2],即pa的值為&pa[2]*/ 指針變量的加減運算只能對數(shù)組指針變量進行, 對指向其它類型變量的指針變量作加減運算是毫無意義的。(3)兩個指針變量之間的運算只有指向同一數(shù)組的兩個指針變量之間才能進行運算, 否則運算毫無意義。

    ①兩指針變量相減
    兩指針變量相減所得之差是兩個指針所指數(shù)組元素之間相差的元素個數(shù)。實際上是兩個指針值(地址) 相減之差再除以該數(shù)組元素的長度(字節(jié)數(shù))。例如pf1和pf2 是指向同一浮點數(shù)組的兩個指針變量,設pf1的值為2010H,pf2的值為2000H,而浮點數(shù)組每個元素占4個字節(jié),所以pf1-pf2的結果為(2000H-2010H)/4=4,表示pf1和 pf2之間相差4個元素。兩個指針變量不能進行加法運算。 例如, pf1+pf2是什么意思呢?毫無實際意義。

    ②兩指針變量進行關系運算
    指向同一數(shù)組的兩指針變量進行關系運算可表示它們所指數(shù)組元素之間的關系。例如:
    pf1==pf2表示pf1和pf2指向同一數(shù)組元素
    pf1>pf2表示pf1處于高地址位置
    pf1<pf2表示pf2處于低地址位置
    main(){
    int a=10,b=20,s,t,*pa,*pb; 
    pa=&a;
    pb=&b;
    s=*pa+*pb;
    t=*pa**pb;
    printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
    printf("s=%d\nt=%d\n",s,t);
    }
    ......
    說明pa,pb為整型指針變量
    給指針變量pa賦值,pa指向變量a。
    給指針變量pb賦值,pb指向變量b。
    本行的意義是求a+b之和,(*pa就是a,*pb就是b)。
    本行是求a*b之積。
    輸出結果。
    輸出結果。
    ...... 
    指針變量還可以與0比較。設p為指針變量,則p==0表明p是空指針,它不指向任何變量;p!=0表示p不是空指針?罩羔樖怯蓪χ羔樧兞抠x予0值而得到的。例如: #define NULL 0 int *p=NULL; 對指針變量賦0值和不賦值是不同的。指針變量未賦值時,可以是任意值,是不能使用的。否則將造成意外錯誤。而指針變量賦0值后,則可以使用,只是它不指向具體的變量而已。
    main(){
    int a,b,c,*pmax,*pmin;
    printf("input three numbers:\n");
    scanf("%d%d%d",&a,&b,&c);
    if(a>b){
    pmax=&a;
    pmin=&b;}
    else{
    pmax=&b;
    pmin=&a;}
    if(c>*pmax) pmax=&c;
    if(c<*pmin) pmin=&c;
    printf("max=%d\nmin=%d\n",*pmax,*pmin);
    }
    ...... 
    pmax,pmin為整型指針變量。
    輸入提示。
    輸入三個數(shù)字。
    如果第一個數(shù)字大于第二個數(shù)字...
    指針變量賦值
    指針變量賦值
    指針變量賦值
    指針變量賦值
    判斷并賦值
    判斷并賦值 
    輸出結果
    ......

上一頁  1 2 3 4 5 6 7 下一頁
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。