一、知識點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直接賦值,可以用&zeropi = 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 = π // 錯誤:不能把const對象賦給非const指針const double *cptr = π // 正確*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;
一、知識點1、數組2、指針的引入3、C風格字符串4、多維數組二、要點 2、指針的引入 (1)、指針初始化和賦值操作的約束: 不能把int型變量賦給指針,但是可以吧數值0或在編譯時可獲得0值的const量賦給指針:
void*指針:可以保存任何類型對象的指針;但是不允許使用void*指針操作它所指向的對象。 (2)、指針和引用 引用總是指向某個對象,定義引用時沒有初始化是錯誤的;指針定義時可以不用初始化 給引用賦值修改的是該引用所關聯的對象的值;指針就修改了指針的值
(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對象的指針,但是反過來不行(即第一點說的);但這時還是不能通過指針修改其指對象的值。
【2】、const指針:double *const cptr 這個指針就是說明指針本身是不能修改的,即它不能使const指針再指向其他對象;正因為這樣,所以const指針必須在定義時初始化(和const變量一樣)。 【3】、指向const對象的const指針:const double *const pi_ptr 這個指針即不能修改它指向對象的值,也不能修改該指針的指向(即它的地址)。 (5)、指針和typedef
posted on 2012-08-01 22:42 tiger7 閱讀(147) 評論(0) 編輯 收藏 引用 所屬分類: C++ Primer
Powered by: C++博客 Copyright © tiger7