新手入門學習:淺析c/c++中的指針

字號:

在學習c/c+過程中,指針是一個比較讓人頭痛的問題,稍微不注意將會是程序編譯無法通過,甚至造成死機。在程序設計過程中,指針也往往是產生隱含bug的原因。下面就來談談指針的應用以及需要注意的一些問題,里面也許就有你平時沒有注意到的問題,希望能幫助各位讀者理解好指針。
    一、我們先來回憶一下指針的概念吧,方便下面的介紹
    指針是存放地址值的變量或者常量。例如:int a=1;&a就表示指針常量(“&”表示取地址運算符,也即引用)。int *b,b表示的是指針變量(注意,是b表示指針變量而不是*b),*表示要說明的是指針變量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一個指針數組,而int (*b)[2]表示含有兩個元素的int指針,這里要注意運算優(yōu)先級問題,有助于理解指針問題。在這里大概介紹基本概念就夠了,至于具體使用方法,如賦值等,很多書都有介紹,我就不多說了。
    二、應用以及注意的問題
    1、 理解指針的關鍵所在——對指針類型和指針所指向的類型的理解
    ①、 指針類型:可以把指針名字去掉,剩下的就是這個指針
    例如:int *a;//指針類型為int *
    int **a;//指針類型為int **
    int *(*a)[8];//指針類型為 int *(*)[8]
    ②、 指針所指向的類型:是指編譯器將把那一片內存所看待成的類型。這里只要把
    指針聲明語句中的指針名字和名字右邊的“*”號去掉就可以了,剩下的就是指針所指向的類型。
    我之所以把他們放在第一位,是因為弄清楚他們是學c/c++指針的重點,正確理解他們才能使你打好c/c++的編程基礎。
    2、 指針的應用——傳遞參數。
    其實它可以相當于隱式的返回值,這就比return的方法更加靈活了,可以返回更多的值,看看下面的例子自然就明白了:
    #include "iostream.h"
    void example(int *a1,int &b1,int c1)
    {
    *a1*=3;
    ++b1;
    ++c1;
    }
    void main()
    {
    int *a;
    int b,c;
    *a=6;
    b=7;c=10;
    example(a,b,c);
    cout <<"*a="<<*a<
    cout <<"b="<
    cout <<"c="<
    }
    輸出:*a=18
    b=8
    c=10