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

            常用鏈接

            留言簿

            文章分類

            文章檔案

            搜索

            最新評論

            99久久免费国产特黄| 精品水蜜桃久久久久久久| 国产成人香蕉久久久久| 久久久久国色AV免费看图片| 伊人久久大香线蕉综合5g| 婷婷久久久亚洲欧洲日产国码AV | 久久国产香蕉视频| 久久午夜无码鲁丝片秋霞| 色综合久久无码五十路人妻| 2021少妇久久久久久久久久| 久久综合亚洲色HEZYO国产| 狠狠狠色丁香婷婷综合久久五月| 久久天天婷婷五月俺也去| 狠狠干狠狠久久| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 欧美久久久久久| 国产成人综合久久综合| 久久一区二区三区免费| 69久久精品无码一区二区| 日本久久中文字幕| 中文字幕久久欲求不满| 久久久久99精品成人片试看| 久久国产精品视频| 久久久久亚洲AV无码专区体验| 久久亚洲国产成人影院网站| 97久久天天综合色天天综合色hd | 香蕉久久一区二区不卡无毒影院| 久久精品国产欧美日韩99热| 品成人欧美大片久久国产欧美...| 中文字幕久久波多野结衣av| 亚洲国产天堂久久久久久 | 久久国产精品无码网站| 国产成人精品久久免费动漫| 久久综合狠狠综合久久综合88 | 久久国产免费直播| 亚洲欧美伊人久久综合一区二区| 久久人人爽人人澡人人高潮AV| 亚洲国产成人久久综合一| 国产精品久久成人影院| av午夜福利一片免费看久久| 亚洲国产精品久久|