• <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>

            C++ Primer 學習筆記(七) ---- 第四章 數組和指針(2)

            一、知識點
            1、數組
            2、指針的引入
            3、C風格字符串
            4、多維數組

            二、要點
                  2、指針的引入
                     (1)、指針初始化和賦值操作的約束:
                           不能把int型變量賦給指針,但是可以吧數值0或在編譯時可獲得0值的const量賦給指針:

            int ival;
            int zero = 0;
            const int c_ival = 0;

            int *pi = ival;   // 錯誤:
            pi = zero;        // 錯誤:不能使用int直接賦值,可以用&zero
            pi = c_ival;      // 正確
            pi = 0;            // 正確

                           void*指針:可以保存任何類型對象的指針;但是不允許使用void*指針操作它所指向的對象。

                     (2)、指針和引用
                           引用總是指向某個對象,定義引用時沒有初始化是錯誤的;指針定義時可以不用初始化
                           給引用賦值修改的是該引用所關聯的對象的值;指針就修改了指針的值

            int ival = 1024, ival2 = 2048;
            int *pi = &ival, *pi2 = &ival2;
            pi 
            = pi2;       // 這里就修改pi指向的對象是pi2,而不在是pi了。


            int &ri = ival, &ri2 = ival2;
            ri 
            = ri2;        // 這里修改的就是ival的值了,使ival的值為2048


                     (3)、指針的操作
                           ptrdiff_t:表示2個指針減法操作的結果;
                           ptrdiff_t和size_t的區別:size_t是unsigned類型,ptrdiff_t是signed類型的。
                           C++允許計算數組對象的超出末端的地址,但是不允許對改地址進行解引用。

                     (4)、指針和const
                           【1】、指向const對象的指針:const double *cptr
                        C++強制要求指向const對象的指針也必須具有const特性,即把一個const對象的地址賦給一個普通的、非cosnt對象的指針會導致編譯錯誤;
                        const限定了cptr指針所指的對象是const,而不是cptr本身,即可以給cptr重新賦值,但是不能通過cptr修改其指對象的值;
                        不能使用void*指針保存const對象的地址,必須用const void*;
                        允許把非const對象的地址賦值給指向const對象的指針,但是反過來不行(即第一點說的);但這時還是不能通過指針修改其指對象的值。

            double dval = 3.14;
            const double pi = 3.14;

            double *pi = &pi;               // 錯誤:不能把const對象賦給非const指針
            const double *cptr = &pi;   // 正確
            *cptr = 3.1415;                // 錯誤:不能通過cosnt指針修改所指對象的值

            cptr 
            = &dval;                   // 正確:可以用非const對象給const指針賦值
            *cptr = 3.1415;               // 錯誤:雖然這時指向了非const對象,但還是不能這樣修改對象的值

                           【2】、const指針:double *const cptr
                        這個指針就是說明指針本身是不能修改的,即它不能使const指針再指向其他對象;正因為這樣,所以const指針必須在定義時初始化(和const變量一樣)。
                           【3】、指向const對象的const指針:const double *const pi_ptr
                        這個指針即不能修改它指向對象的值,也不能修改該指針的指向(即它的地址)。

                     (5)、指針和typedef

            typedef string *pstring;
            const pstring cstr;

            // 聲明const pstring時,const修飾的是pstring的類型,而pstring這是一個指針,所以這里cstr是一個const的指針,指向string,等價于下面:
            string *const cstr;


             

            posted on 2012-08-01 22:42 tiger7 閱讀(152) 評論(0)  編輯 收藏 引用 所屬分類: C++ Primer

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            公告

            welcome to tiger's blog.

            常用鏈接

            留言簿

            文章分類

            文章檔案

            搜索

            最新評論

            国产精品久久久久蜜芽| 国产精品久久久久久久久鸭| 免费一级做a爰片久久毛片潮| 亚洲国产成人久久一区久久 | www.久久热| 91久久香蕉国产熟女线看| 久久综合九色综合欧美就去吻| 久久无码人妻精品一区二区三区| 东方aⅴ免费观看久久av| 国产欧美久久久精品| 无码人妻久久一区二区三区蜜桃| 国产亚洲精品自在久久| 久久无码国产| 99久久婷婷国产一区二区| 久久精品国产久精国产一老狼| 久久久久夜夜夜精品国产| 狠狠综合久久AV一区二区三区| 国内精品久久久久久麻豆| 欧美大香线蕉线伊人久久| 欧美与黑人午夜性猛交久久久| 99久久久精品免费观看国产| 亚洲国产精品成人久久| 一本大道久久东京热无码AV| 青青草国产精品久久| 国产精品99精品久久免费| 亚洲国产成人精品91久久久 | 麻豆av久久av盛宴av| 99久久精品国产一区二区三区| 亚洲色婷婷综合久久| 久久久久久精品免费免费自慰| 久久综合日本熟妇| 久久国产成人午夜aⅴ影院| 99热热久久这里只有精品68| 国产精品久久亚洲不卡动漫| 久久婷婷五月综合97色| 久久久久99精品成人片直播| 久久w5ww成w人免费| 久久亚洲美女精品国产精品| 久久久久久无码Av成人影院| 久久久青草久久久青草| 国产精品九九久久精品女同亚洲欧美日韩综合区 |