青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

指針和數(shù)組有著密切的關(guān)系,任何能由數(shù)組下標完成的操作也都可用指針來實現(xiàn),但程序中使用指針可使代碼更緊湊、更靈活。

一、指向數(shù)組元素的指針
    
我們定義一個整型數(shù)組和一個指向整型的指針變量:
        int a[10], *p; 
    
和前面介紹過的方法相同,可以使整型指針p指向數(shù)組中任何一個元素,假定給出賦值運算
        p=&a[0]; 
    
此時,p指向數(shù)組中的第0號元素,a[0],指針變量p中包含了數(shù)組元素a[0]的地址,由于數(shù)組元素在內(nèi)存中是連續(xù)存放的,因此,我們就可以通過指針變量p及其有關(guān)運算間接訪問數(shù)組中的任何一個元素。 
    Turbo C
,數(shù)組名是數(shù)組的第0號元素的地址,因此下面兩個語句是等價的
        p=&a[0]; 
        p=a; 
    
根據(jù)地址運算規(guī)則,a+1a[1]的地址,a+i就為a[i]的地址。
    
下面我們用指針給出數(shù)組元素的地址和內(nèi)容的幾種表示形式:
        (1). p+i
a+i均表示a[i]的地址或者講,它們均指向數(shù)組第i號元素即指向a[i]。 
        (2). *(p+i)
*(a+i)都表示p+ia+i所指對象的內(nèi)容,即為a[i]。 
        (3). 
指向數(shù)組元素的指針也可以表示成數(shù)組的形式,也就是說,它允許指針變量帶下標p[i]*(p+i)等價。
             
假若:        p=a+5; 
                 
p[2]就相當于*(p+2), 由于p指向a[5], 所以p[2]就相當于a[7]。而p[-3]就相當于*(p-3), 它表示a[2]

二、指向二維數(shù)組的指針 
    1.
二維數(shù)組元素的地址 
        
為了說明問題我們定義以下二維數(shù)組:
            int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; 
                a
為二維數(shù)組名,此數(shù)組有3412個元素。但也可這樣來理解,數(shù)組a由三個元素組成:a[0],a[1],a[2]。而每個元素又是一個一維數(shù)組且都含有4個元素(相當于4),例如,a[0]所代表的一維數(shù)組所包含的 4 個元素為a[0][0], a[0][1], a[0][2], a[0][3]。如圖所示
                     ______        _______________
                a---| a[0] | ____ | 0 | 1 | 2 | 3 |
                    |______|      |___|___|___|___|
                    | a[1] | ____ | 4 | 5 | 6 | 7 |
                    |______|      |___|___|___|___|
                    | a[2] | ____ | 8 | 9 | 10| 11|
                    |______|      |___|___|___|___|

        
        
但從二維數(shù)組的角度來看,a代表二維數(shù)組的首地址,當然也可看成是二維數(shù)組第0行的首地址。a+1就代表第1行的首地址,a+2就代表第2行的首地址。如果此二維數(shù)組的首地址為1000,由于第0行有4個整型元素,所以a+11008,a+2也就為1016。如圖所示
                                   _______________
                      (1000) ____ | 0 | 1 | 2 | 3 |
                                  |___|___|___|___|
                      (1008) ____ | 4 | 5 | 6 | 7 |
                                  |___|___|___|___|
                      (1016) ____ | 8 | 9 | 10| 11|
                                  |___|___|___|___|

        
既然我們把a[0],a[1],a[2]看成是一維數(shù)組名,可以認為它們分別代表它們所對應(yīng)的數(shù)組的首地址,也就是講,a[0]代表第 0 行中第 0 列元素的地址,&a[0][0], a[1]是第1行中第0列元素的地址,&a[1][0],根據(jù)地址運算規(guī)則,a[0]+1即代表第0行第1列元素的地址,&a[0][1],一般而言,a[i]+j即代表第i行第j列元素的地址&a[i][j]。
        
另外,在二維數(shù)組中,我們還可用指針的形式來表示各元素的地址。如前所述,a[0]*(a+0)等價,a[1]*(a+1)等價,因此a[i]+j就與*(a+i)+j等價,它表示數(shù)組元素a[i][j]的地址。
        
因此,二維數(shù)組元素a[i][j]可表示成*(a[i]+j)*(*(a+i)+j),它們都與a[i][j]等價,或者還可寫成(*(a+i))[j]。 

        
另外要補充說明一下果你編寫一個程序輸出打印a*a,你可發(fā)現(xiàn)它們的值是相同的,這是為什么呢我們可這樣來理解
            
首先,為了說明問題,我們把二維數(shù)組人為地看成由三個數(shù)組元素a[0],a[1],a[2]組成,a[0],a[1],a[2]看成是數(shù)組名它們又分別是由4個元素組成的一維數(shù)組。因此,a表示數(shù)組第0行的地址*a即為a[0], 它是數(shù)組名當然還是地址,它就是數(shù)組第行第列元素的地址。
    2.
指向一個由n個元素所組成的數(shù)組指針
        
Turbo C可定義如下的指針變量
            int (*p)[3]; 
        
指針p為指向一個由3個元素所組成的整型數(shù)組指針。在定義中,圓括號是不能少的否則它是指針數(shù)組這將在后面介紹。這種數(shù)組的指針不同于前面介紹的整型指針,當整型指針指向一個整型數(shù)組的元素時,進行指針(地址)1運算,表示指向數(shù)組的下一個元素,此時地址值增加了2(因為放大因子為2),而如上所定義的指向一個由3個元素組成的數(shù)組指針,進行地址加1運算時,其地址值增加了6(放大因子為2x3=6), 
        
這種數(shù)組指針在Turbo C中用得較少,但在處理二維數(shù)組時還是很方便的。例如
            int a[3][4], (*p)[4]; 
            p=a; 
        
開始時p指向二維數(shù)組第0,當進行p+1運算時,根據(jù)地址運算規(guī)則,此時放大因子為4x2=8,所以此時正好指向二維數(shù)組的第1行。和二維數(shù)組元素地址計算的規(guī)則一樣,*p+1指向a[0][1],*(p+i)+j則指向數(shù)組元素a[i][j]。 
        
例:
            int a[3][4]={ 
                          {1,3,5,7}, 
                          {9,11,13,15}, 
                          {17,19,21,23}
                        }; 

            main() 
            { 
                int i,(*b)[4]; 
                b=a+1;     /* b
指向二維數(shù)組的第1此時*b[0]a[1][0] */ 
                for(i=1;i<=4;b=b[0]+2,i++)   /* 
修改b的指向每次增加2 */ 
                printf("%d\t",*b[0]); 
                printf("\n"); 
                for(i=0; i<3; i++)
                { 
                    b=a+i;       /* 
修改b的指向,每次跳過二維數(shù)組的一行 */ 
                    printf("%d\t",*(b[i]+1)); 
                } 
                    printf ("\n"); 
            }
            
程序運行結(jié)果如下
                 9    13   17   21 
                 3    11   19 

三、字符指針 
    
我們已經(jīng)知道,字符串常量是由雙引號括起來的字符序列,例如
        "a string" 
    
就是一個字符串常量,該字符串中因為字符a后面還有一個空格字符,所以它由8個字符序列組成。在程序中如出現(xiàn)字符串常量C編譯程序就給字符串常量按排一存貯區(qū)域,這個區(qū)域是靜態(tài)的,在整個程序運行的過程中始終占用平時所講的字符串常量的長度是指該字符串的字符個數(shù)但在按排存貯區(qū)域時, C 編譯程序還自動給該字符串序列的末尾加上一個空字符'\0',用來標志字符串的結(jié)束,因此一個字符串常量所占的存貯區(qū)域的字節(jié)數(shù)總比它的字符個數(shù)多一個字節(jié)。
    Turbo C
中操作一個字符串常量的方法有
    (1).
把字符串常量存放在一個字符數(shù)組之中例如:
            char s[]="a string"; 
        
數(shù)組s共有9個元素所組成,其中s[8]中的內(nèi)容是'\0'。實際上,在字符數(shù)組定義的過程中,編譯程序直接把字符串復(fù)寫到數(shù)組中,即對數(shù)組s初始化。
    (2).
用字符指針指向字符串,然后通過字符指針來訪問字符串存貯區(qū)域。當字符串常量在表達式中出現(xiàn)時
        
根據(jù)數(shù)組的類型轉(zhuǎn)換規(guī)則,它被轉(zhuǎn)換成字符指針。因此,若我們定義了一字符指針cp: 
            char *cp; 
        
于是可用
            cp="a string"; 
        
使cp指向字符串常量中的第0號字符a, 如圖所示。 
                      
                            ___________________________________
                CP -----   | a |   | s | t | r | i | n | g | \0| 
                           |___|___|___|___|___|___|___|___|___| 
                                          
        
以后我們可通過cp來訪問這一存貯區(qū)域*cpcp[0]就是字符a,cp[i]*(cp+i)就相當于字符串的第i號字符,但企圖通過指針來修改字符串常量的行為是沒有意義的。 

四、指針數(shù)組 
    
因為指針是變量,因此可設(shè)想用指向同一數(shù)據(jù)類型的指針來構(gòu)成一個數(shù)組這就是指針數(shù)組。數(shù)組中的每個元素都是指針變量,根據(jù)數(shù)組的定義,指針數(shù)組中每個元素都為指向同一數(shù)據(jù)類型的指針。指針數(shù)組的定義格式為
         
類型標識 *數(shù)組名[整型常量表達式]; 
    
例如
         int *a[10]; 
    
定義了一個指針數(shù)組,數(shù)組中的每個元素都是指向整型量的指針,該數(shù)組由10個元素組成,a[0],a[1],a[2], ..., a[9],它們均為指針變量。a為該指針數(shù)組名,和數(shù)組一樣,a是常量,不能對它進行增量運算。a為指針數(shù)組元素a[0]的地址,a+ia[i]的地址,*a就是a[0],*(a+i)就是a[i]。
    
為什么要定義和使用指針數(shù)組呢?主要是由于指針數(shù)組對處理字符串提供了更大的方便和靈活,使用二維數(shù)組對處理長度不等的正文效率低,而指針數(shù)組由于其中每個元素都為指針變量,因此通過地址運算來操作正文行是十分方便的。
    
指針數(shù)組和一般數(shù)組一樣,允許指針數(shù)組在定義時初始化,但由于指針數(shù)組的每個元素是指針變量,它只能存放地址,所以對指向字符串的指針數(shù)組在說明賦初值時,是把存放字符串的首地址賦給指針數(shù)組的對應(yīng)元素
    
例如下面是一個書寫函數(shù)month_name(n),函數(shù)返回一個指向包含第n月名字的字符指針(關(guān)于函數(shù)指針和指針函數(shù),下一節(jié)將專門介紹)。 
              
    
打印1月至12月的月名
        char *month_name(int n) 
        { 
             static char *name[]={ 
                                    "Illegal month", 
                                    "January", 
                                    "February", 
                                    "March", 
                                    "April", 
                                    "May", 
                                    "June", 
                                    "July", 
                                    "August", 
                                    "September", 
                                    "October", 
                                    "November", 
                                    "December" 
                                 }; 
             return((n<1||n>12)?name[0]:name[n]); 
        } 

        main() 
        { 
            int i; 
            for(i=0; i<13; i++) 
                printf("%s\n", month_name(i)); 
        }

對于指針這一節(jié),一定要多練習(xí)一些題。指針是一個很重要的概念,必須多接觸實際的問題才能掌握它。
Posted on 2005-11-03 10:06 艾凡赫 閱讀(1849) 評論(1)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)類型

Feedback

# re: 數(shù)組和指針  回復(fù)  更多評論   

2012-08-22 16:40 by 劉偉
不錯!贊一個
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人国产| 国产精品成人aaaaa网站 | 亚洲最新视频在线播放| 亚洲高清免费| 欧美日韩国产一级片| 亚洲影音一区| 亚洲第一综合天堂另类专| 欧美日韩国产精品自在自线| 亚洲欧美综合国产精品一区| 久久精品观看| 一本色道久久综合亚洲精品婷婷| 亚洲欧美另类久久久精品2019| 亚洲第一页在线| 亚洲性夜色噜噜噜7777| 在线欧美电影| 亚洲制服少妇| 亚洲精品国产精品国自产观看 | 在线 亚洲欧美在线综合一区| 最近中文字幕日韩精品| 国内精品视频在线观看| 999亚洲国产精| 亚洲第一黄色| 午夜精品一区二区三区在线播放 | 久久国产色av| 午夜精品区一区二区三| 欧美日本在线播放| 欧美成人69| 国外成人在线视频| 亚洲综合欧美日韩| 亚洲视频在线观看一区| 欧美黄网免费在线观看| 美日韩在线观看| 国产欧美一区在线| 亚洲午夜av| 亚洲午夜电影| 欧美日韩中文在线| 亚洲精品欧洲| 99视频精品全部免费在线| 久久综合久久综合这里只有精品| 久久精品噜噜噜成人av农村| 国产精品久久久一本精品| 亚洲免费电影在线观看| 夜色激情一区二区| 欧美精品电影| 亚洲毛片在线观看.| 亚洲蜜桃精久久久久久久| 免费在线国产精品| 欧美激情a∨在线视频播放| 亚洲高清不卡在线| 老司机一区二区三区| 男女精品视频| 亚洲国产女人aaa毛片在线| 裸体女人亚洲精品一区| 欧美激情一区二区三区高清视频| 亚洲国产三级| 欧美精品日韩www.p站| 日韩视频在线你懂得| aa亚洲婷婷| 欧美午夜宅男影院| 亚洲综合视频1区| 久久久久国内| 亚洲国产裸拍裸体视频在线观看乱了| 葵司免费一区二区三区四区五区| 欧美国产日韩精品| 99精品视频一区| 国产精品国产a级| 小辣椒精品导航| 麻豆精品网站| 99精品视频免费| 久久综合网络一区二区| 亚洲第一在线综合在线| 一区二区日韩欧美| 国产精品超碰97尤物18| 午夜精品视频| 毛片精品免费在线观看| 亚洲黄网站在线观看| 欧美老女人xx| 免费一区视频| 在线视频免费在线观看一区二区| 国产精品美女999| 久久精品在线视频| 亚洲第一天堂无码专区| 亚洲一区二区伦理| 国产一区日韩欧美| 女人香蕉久久**毛片精品| 亚洲美女av黄| 久久激情五月激情| 亚洲经典自拍| 国产精品天美传媒入口| 久久久一区二区三区| 亚洲精品久久久久久久久久久久久| 亚洲一区二区三区精品动漫| 国产日产欧美精品| 欧美久色视频| 久久久久国产精品www| 亚洲免费黄色| 免费亚洲电影在线| 亚洲欧洲av一区二区| 亚洲黄页视频免费观看| 国产精品一区二区三区观看| 毛片av中文字幕一区二区| 9i看片成人免费高清| 欧美va天堂| 欧美在线一二三| 一区二区三区视频在线看| 国内外成人在线| 国产精品大片| 欧美激情一区在线观看| 久久er99精品| 亚洲免费在线观看| 日韩一区二区久久| 最新69国产成人精品视频免费 | 欧美性开放视频| 免费av成人在线| 欧美在线资源| 亚洲综合精品自拍| 一本色道婷婷久久欧美| 亚洲成人自拍视频| 久久午夜电影网| 欧美在线在线| 亚洲欧美视频| 亚洲无限av看| 99国产精品一区| 亚洲国产精品一区制服丝袜| 国产区精品在线观看| 国产精品av免费在线观看| 欧美经典一区二区| 免费高清在线一区| 久久综合九色综合网站| 久久嫩草精品久久久精品一| 欧美一区二区网站| 亚洲欧美一区二区三区久久| 亚洲亚洲精品在线观看 | 永久555www成人免费| 国产色爱av资源综合区| 国产精品视频精品| 国产精品美女久久久久av超清| 欧美日韩久久| 欧美日韩精品一区二区| 欧美日韩精品免费在线观看视频| 欧美精选一区| 欧美欧美全黄| 免费观看成人www动漫视频| 欧美午夜a级限制福利片| 欧美电影免费网站| 美女网站久久| 免费在线看一区| 欧美另类99xxxxx| 欧美剧在线观看| 欧美日韩亚洲综合| 国产精品va| 国产欧美一区二区精品忘忧草| 国产精品午夜国产小视频| 国产精品视频不卡| 精久久久久久| 亚洲国产精品v| 一本色道久久综合亚洲精品婷婷| 亚洲一区日韩在线| 久久国产精彩视频| 欧美mv日韩mv国产网站| 亚洲欧洲一级| 亚洲一区二区在线免费观看| 久久都是精品| 欧美韩日亚洲| 国产精品一区二区久激情瑜伽| 国产一区欧美| 亚洲毛片在线| 香蕉av777xxx色综合一区| 久久综合色影院| 91久久中文字幕| 亚洲欧美在线观看| 免费久久99精品国产自| 欧美午夜电影一区| 国产在线欧美| 999亚洲国产精| 久久国产精品99久久久久久老狼| 久久综合狠狠综合久久综青草| 亚洲高清中文字幕| 亚洲一区二区av电影| 久久免费一区| 国产精品久久看| 最新日韩精品| 欧美中文字幕| 亚洲精品国产精品乱码不99| 亚洲一区精彩视频| 欧美成人有码| 在线视频你懂得一区二区三区| 亚洲香蕉网站| 麻豆精品视频在线观看视频| 日韩一区二区精品视频| 久久久xxx| 国产精品美女久久| 亚洲精选中文字幕| 久久免费午夜影院| 一区二区免费在线播放| 麻豆成人在线播放| 国产日韩一区| 亚洲自拍偷拍一区| 最新高清无码专区| 久久精品二区三区|