C++學習筆記——指針

首先聲明:在C++編程時,儘可能減小數組和指針的使用。首先數組和指針容易產生不可預料的錯誤,相對也複雜和繁瑣。在程序中,不少時候數組和指針的寫法可使用Vector類型和迭代器來替代。編程

1.指針變量的定義和初始化

C++指針變量定義有兩種方式:

cppint *ip1;
    int* ip1;
    //兩種方式都可以定義指針,可是在連續聲明多個函數時容易出錯。
    string* ip1, ip2;//ip1爲指向string類型對象的指針,ip2爲string類型的對象。
    string* ip1, *ip2;//ip1和ip2同爲指向string類型對象的指針。
    string *ip1,*ip2;//對比可見這種方式比較不容易產生歧義。

C++初始化指針

因爲未初始化的指針容易引起錯誤,在定義指針的時候,先定義指針所要指向的對象,若必須分開定義,給指針賦值爲0數組

cpp//賦給指針的地址必須是合法得到的地址,該地址所存儲的數據類型與指針類型相同
    int a = 11;
    int *ip = &a;
    int *ip1 = 0;

void指針

除了基本數據類型,還有void指針,代表該指針與一地址值相關,可是不知道改地址上對象的數據類型。可是沒法對地址上的對象進行操做。函數

cppstring str="abc";
    void *ip = &str;

2.指針訪問數組

指針算術操做

cppint a[] = {2,4,6,8,10};
int *ip = a;//這裏的a實際上是數組a的首地址,即爲&a[0]
//若是想讓指針ip指向a[4],能夠用如下兩種方式
ip = &a[4];
ip = a + 4;

下面根據上面的定義來計算兩個式子的值:
1.*(a + 4)
2.*a + 4指針

第一個式子是a[0]地址向後移四位,獲得a[4]的地址,在用*號結引用最後獲得的結果是a[4]中的值,即爲10
第二個式子在a[0]處解引用,獲得a[0]中存儲的數值2,而後對2進行算術運算,最後的結果是6code

指針和const限定符

能夠歸結爲兩種:對象

1.指向const對象的指針

指針能夠改變指向的地址,可是不能改變const對象的值。
定義const int *ip;
const對象只能使用指向const指針指向它,可是指向const指針也能夠指向非const對象,被指向const對象的指針所指向的對象的值不能被修改。ip

2.const指針

cppint a = 1;
int *const ip = &a;

因爲const指針的值不能被修改,因此在定義const指針時必須初始化const指針。
修改const指針所指對象的值是容許的:string

cpp*ip = 0;
cout << a << endl;//輸出0

最後放一個繞的不行的變量

cpptypedef string *pstring;
const pstring cstr;
//等價於
string *const cstr;
相關文章
相關標籤/搜索