黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

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

 

    二、多維數組的指針變量 

    把二維數組a 分解為一維數組a[0],a[1],a[2]之后,設p為指向二維數組的指針變量。可定義為: int (*p)[4] 它表示p是一個指針變量,它指向二維數組a 或指向第一個一維數組a[0],其值等于a,a[0],或&a[0][0]等。而p+i則指向一維數組a[i]。從前面的分析可得出*(p+i)+j是二維數組i行j 列的元素的地址,而*(*(p+i)+j)則是i行j列元素的值。

    二維數組指針變量說明的一般形式為: 類型說明符 (*指針變量名)[長度] 其中“類型說明符”為所指數組的數據類型。“*”表示其后的變量是指針類型。 “長度”表示二維數組分解為多個一維數組時, 一維數組的長度,也就是二維數組的列數。應注意“(*指針變量名)”兩邊的括號不可少,如缺少括號則表示是指針數組(本章后面介紹),意義就完全不同了。
    [Explain]main(){
    static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    int(*p)[4];
    int i,j;
    p=a;
    for(i=0;i<3;i++)
    for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j));
    }
    ’Expain字符串指針變量的說明和使用字符串指針變量的定義說明與指向字符變量的指針變量說明是相同的。只能按對指針變量的賦值不同來區別。 對指向字符變量的指針變量應賦予該字符變量的地址。如: char c,*p=&c;表示p是一個指向字符變量c的指針變量。而: char *s="C Language";則表示s是一個指向字符串的指針變量。把字符串的首地址賦予s。
    請看下面一例。
    main(){
    char *ps;
    ps="C Language";
    printf("%s",ps);
    }
    運行結果為:
    C Language 
    上例中,首先定義ps是一個字符指針變量, 然后把字符串的首地址賦予ps(應寫出整個字符串,以便編譯系統把該串裝入連續的一塊內存單元),并把首地址送入ps。程序中的: char *ps;ps="C Language";等效于: char *ps="C Language";輸出字符串中n個字符后的所有字符。
    main(){
    char *ps="this is a book";
    int n=10;
    ps=ps+n;
    printf("%s\n",ps);
    }
    運行結果為:
    book 在程序中對ps初始化時,即把字符串首地址賦予ps,當ps= ps+10之后,ps指向字符“b”,因此輸出為"book"。
    main(){
    char st[20],*ps;
    int i;
    printf("input a string:\n");
    ps=st;
    scanf("%s",ps);
    for(i=0;ps[i]!=’\0’;i++)
    if(ps[i]==’k’){
    printf("there is a ’k’ in the string\n");
    break;
    }
    if(ps[i]==’\0’) printf("There is no ’k’ in the string\n");
    }
    本例是在輸入的字符串中查找有無‘k’字符。 下面這個例子是將指針變量指向一個格式字符串,用在printf函數中,用于輸出二維數組的各種地址表示的值。但在printf語句中用指針變量PF代替了格式串。 這也是程序中常用的方法。
    main(){
    static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    char *PF;
    PF="%d,%d,%d,%d,%d\n";
    printf(PF,a,*a,a[0],&a[0],&a[0][0]);
    printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
    printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
    printf("%d,%d\n",a[1]+1,*(a+1)+1);
    printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
    }
    在下例是講解,把字符串指針作為函數參數的使用。要求把一個字符串的內容復制到另一個字符串中,并且不能使用strcpy函數。函數cprstr的形參為兩個字符指針變量。pss指向源字符串,pds指向目標字符串。表達式: 
    (*pds=*pss)!=`\0’
    cpystr(char *pss,char *pds){
    while((*pds=*pss)!=’\0’){
    pds++;
    pss++; }
    }
    main(){
    char *pa="CHINA",b[10],*pb;
    pb=b;
    cpystr(pa,pb);
    printf("string a=%s\nstring b=%s\n",pa,pb);
    } 
    在上例中,程序完成了兩項工作:一是把pss指向的源字符復制到pds所指向的目標字符中,二是判斷所復制的字符是否為`\0’,若是則表明源字符串結束,不再循環。否則,pds和pss都加1,指向下一字符。在主函數中,以指針變量pa,pb為實參,分別取得確定值后調用cprstr函數。由于采用的指針變量pa和pss,pb和pds均指向同一字符串,因此在主函數和cprstr函數中均可使用這些字符串。也可以把cprstr函數簡化為以下形式: 
    cprstr(char *pss,char*pds)
    {while ((*pds++=*pss++)!=`\0’);}
    即把指針的移動和賦值合并在一個語句中。 進一步分析還可發現`\0’的ASCⅡ碼為0,對于while語句只看表達式的值為非0就循環,為0則結束循環,因此也可省去“!=`\0’”這一判斷部分,而寫為以下形式:
    cprstr (char *pss,char *pds)
    {while (*pdss++=*pss++);} 
    表達式的意義可解釋為,源字符向目標字符賦值, 移動指針,若所賦值為非0則循環,否則結束循環。這樣使程序更加簡潔。簡化后的程序如下所示。
    cpystr(char *pss,char *pds){
    while(*pds++=*pss++);
    }
    main(){
    char *pa="CHINA",b[10],*pb;
    pb=b;
    cpystr(pa,pb);
    printf("string a=%s\nstring b=%s\n",pa,pb);
    }

    使用字符串指針變量與字符數組的區別

    用字符數組和字符指針變量都可實現字符串的存儲和運算。 但是兩者是有區別的。在使用時應注意以下幾個問題:

    1. 字符串指針變量本身是一個變量,用于存放字符串的首地址。而字符串本身是存放在以該首地址為首的一塊連續的內存空間中并以‘\0’作為串的結束。字符數組是由于若干個數組元素組成的,它可用來存放整個字符串。

    2. 對字符數組作初始化賦值,必須采用外部類型或靜態類型,如: static char st[]={“C Language”};而對字符串指針變量則無此限制,如: char *ps="C Language";

    3. 對字符串指針方式 char *ps="C Language";可以寫為: char *ps; ps="C Language";而對數組方式: 
    static char st[]={"C Language"};
    不能寫為:
    char st[20];st={"C Language"};
    而只能對字符數組的各元素逐個賦值。

上一頁  1 2 3 4 5 6 7 下一頁
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 五月丁香六月综合缴清无码 | 久久亚洲精品成人 | 国产一区二区三区不卡观 | 国产中文99视频在线观看 | 好色视频 | 日韩欧美亚洲综合久久影院d3 | 免费看国产一级片 | 精品欧美一区二区三区在线观看 | 九草视频在线 | 日韩免费一区二区三区在线 | 午夜影院伦理片 | 亚洲视频在线精品 | 老扒夜夜春宵粗大好爽aa毛片 | 香焦视频在线观看黄 | 欧美日韩第一页 | 黄色网址免费在线播放 | 日韩啊v | 黄色一级视频网 | 天天干天天操天天射 | 天天干狠狠操 | 国产成人精品cao在线 | 性插插视频| 日韩色视| 日本哺乳期xxxxhd奶水 | 欧美激情亚洲精品日韩1区2区 | 久久亚| 中文字幕乱视频 | 一级片免费在线播放 | 色偷偷88欧美精品久久久 | 国产欧美日韩另类一区乌克兰 | 国产成人精品免费午夜 | 最好看2019高清中文字幕 | 日韩免费一区 | 免费大黄网站在线看 | 国产99视频精品免视看7 | 性色在线视频 | 天堂在线国产 | 最近更新中文字幕2019视频 | 日本免费大黄 | 狠狠干网站| 欧美一级免费 |