• <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 閱讀(147) 評論(0)  編輯 收藏 引用 所屬分類: C++ Primer

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            公告

            welcome to tiger's blog.

            常用鏈接

            留言簿

            文章分類

            文章檔案

            搜索

            最新評論

            久久精品视频网| 精品国产日韩久久亚洲| 伊人久久大香线蕉AV色婷婷色 | 久久精品国产乱子伦| 色综合久久最新中文字幕| 国产精品9999久久久久| 国产69精品久久久久久人妻精品| 亚洲国产精品一区二区三区久久| 久久精品国产亚洲5555| 久久国产V一级毛多内射| 久久99热这里只有精品国产| 精品国产热久久久福利| 久久精品成人| 久久综合久久综合亚洲| 99久久国产精品免费一区二区| 久久亚洲精品成人无码网站| 亚洲精品乱码久久久久久久久久久久 | 亚洲精品无码久久久影院相关影片 | 色综合久久最新中文字幕| 亚洲国产精品久久久久婷婷软件| 久久er热视频在这里精品| AAA级久久久精品无码区| 亚洲国产成人乱码精品女人久久久不卡 | 国产叼嘿久久精品久久| 午夜视频久久久久一区| 色8久久人人97超碰香蕉987| 91亚洲国产成人久久精品网址| 日批日出水久久亚洲精品tv| 久久精品国产99国产精品导航 | 国内精品伊人久久久久777| 久久亚洲精品中文字幕| 久久综合丝袜日本网| 国产精品久久久香蕉| 青青草国产成人久久91网| 中文字幕精品久久久久人妻| 国产婷婷成人久久Av免费高清| 久久精品国产精品亚洲下载| 久久男人Av资源网站无码软件| 久久久久亚洲av成人无码电影 | 久久久久无码精品国产app| 精品久久久久久国产|