[VC++入門]指標一

來源:互聯網
上載者:User
    俗話說沒有搞清楚指標就沒有學會C/C++,所以指標是一個相當重要的東東,相當年在用 C#調用C++寫的動態連結程式庫時,以為C++中的指標就是C#中的參考型別(ref),但是看了一下卻不是這樣。指標當然和記憶體是離不開的,有很多版本的定義,但是我覺得最容易理解的是:每一個變數都有一個記憶體位址,這個地址就稱為指標。

    有兩個與指標有關的運算子:取地址運算子“&”(用於取一個變數的地址)和指標運算子“*”(以一個指標作為其運算元,其運算結果表示所指向的變數)。 1 #include  <iostream.h>
 2 void   main()
 3 {
 4     int  a, b, *pa, *pb;
 5     a=10;   b=20;
 6     pa=&a; pb=&b;        // 使pa指向a,pb指向b
 7     cout<<*pa<<','<<*pb<<'\n';
 8     pa=&b;   pb=&a;        // 使pa指向b,pb指向a
 9     cout<<*pa<<','<<*pb<<'\n';
10     *pa=100;   *pb=200;    // 分別對b和a賦值
11     cout<<a<<','<<b<<'\n';
12  }

    從上面我們可以看到聲明了兩個變數a,b類型為int,兩個指標pa,pb(指標類型為int *,指向的類型為int)。第一步&a取得為a所分配的地址即將pa指向a的地址,所以*pa=a=10,同理*pb=b=20;第二步同理可以得到*pa=b=20;*pb=a=10;第三步由於第二步將pa指向b,pb指向a所以a=*pb=200,b=*pa=100。

    指標與數組關係密切,編程時可以用指標代替下標引用數組元素,指標使數組的使用更為靈活、有效。當聲明一個數組後,編譯器會按照數組的類型和長度為它分配記憶體空間,數組名表示數組在記憶體中的首地址;當用一個指標變數儲存數組首地址時,該指標就指向這個數組,就可以通過指標運算間接訪問數組的元素。指標的值是指標本身儲存的數值,這個值將被編譯器當作一個地址,而不是一個一般的數值。在32位程式裡,所有類型的指標的值都是一個32位整數,因為32位程式裡記憶體位址全都是32位長。指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度為sizeof(指標所指向的類型)的一片記憶體區。 1 #include  <iostream.h>
 2 void   main()
 3 {
 4     int   a[ ]={2, 4, 6, 8, 10};
 5     int*  pa=a;            // 或pa=&a[0]
 6     int   result=0;
 7     for(int i=0; i<5; i++)
 8     {
 9         result+=*pa;           // 通過指標訪問數組元素
10         pa++;            // 指標運算
11     }
12     cout<<"result="<<result<<'\n';
13  }

    從上面我們可以看到首先我們聲明了一個數組,並付值也就是說分配其記憶體。而a表示數組在記憶體中的首地址,聲明一個指標並指向a。則pa++就是指向數組的下一個地址(int類型佔四個位元組)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.