<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            多維數組的指針變量

            時間:2025-02-16 02:33:35 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);

              }


            【多維數組的指針變量】相關文章:

            C語言-15:多維數組與指針07-25

            c語言數組指針變量的說明和使用07-26

            c語言知識:數組指針和指針數組的區別07-27

            C語言指針數組的概念07-19

            PHP 多維數組的排序問題12-06

            C語言指針變量的類型07-31

            C語言指針變量的運算05-05

            C語言數組與指針詳解08-15

            C語言函數指針變量06-04

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看