補充內容:C++語言中數組指標和指標數組徹底分析

來源:互聯網
上載者:User

上一次我們主要說明數組,指標,指標數組,數組指標這幾個很基本的概念,
不過有一點上一次我沒有提及,那就是我們使用typedef定義指向數組指標
的數組,這個叫法是不是很拗口呀,不過我們看具體的程式就清楚了。

file://----------數組--------------
int a[2]={10,20};
int b[2]={30,40};
file://簡單的指向兩個元素數組的指標
int (*p2arr)[2]=&a;

file://---------注意這裡的變化--------

file://這裡我們聲明簡單的類型P2ARR.可以這樣描述
file://P2ARR是一種使用者自訂的類型。她的功能描述
file://是用來描述整數數組的,這個數組只能含有兩個元素
typedef int (*P2ARR)[2];

P2ARR pp=&b;
pp=p2arr;//類型一致

file://這裡我們定義指向指向數組指標的數組
P2ARR ap2a[2]={&a,&b};

file://如果我們採用下面的寫法則是錯誤的,原因看下面分析
file://P2ARR ap2a[2]={a,b};//------錯誤寫法-------

---------還有一點注意----------------
有人可以能會說,定義數阻指標的數組,下面這樣的形式
好像也可以做到的。
int (*p2arr)[2][2];
咋一看,好像是的,但是仔細想想。原來上面是定義
一個指標,這個指標是指向二維數組的指標,還是
數組指標,而不是數組指標數組。這一點,應該很容易明白的。

上一次我講到int []數組聲明與int *類型在函數參數等方面轉換的例子。
這裡有一點補充的,我們實際上現在還是不清楚數組來C++編譯器層面的
表示,也就是我們不知道編譯器使用什麼樣的結構形式來表示數組的。所以
上面這些轉換隻能轉換而已,我們不能有更多的假設。

----------我的想象,我的猜想--------
我是這樣相像的,C++採用類似JAVA中Array類的形式來管理數組。當然其中
有許多c++語言的特徵,比如operator *,operator ->等重載,但是這些類型
轉換運算子的使用,只有編譯器認為需要的時候才會調用的,因為數組表示本身
就是編譯器內部結構的嘛。目前到這裡,我們也只能認為在函數參數使用等情況
下才發生int []到int *的轉換。

看下面的程式。
#include <iostream>
using namespace std;
void change(int pa[],int index)
{
 pa[index]=200;
}
int main()
{
 int a[3]={1,2,3};
 change(a,0);//這裡編譯器已經把 int a[3],轉換成int *指標傳給了函數
             file://這個是語言實現細節,請參考《the c++ programming language》
 cout<<a[0];
 return 0;
}

但是我們上面的標註行
//P2ARR ap2a[2]={a,b};//------錯誤寫法-------

則是應該這樣理解:數組就是數組,指標就是指標,雖然編譯器需要的時候
會進行一定的轉換,但是我們不能認為那些轉換是“想當然“的。
上面這一行,編譯器就沒有為我們進行類型轉換的,所以我們要自己動手了。

//P2ARR ap2a[2]={&a,&b};//------正確寫法-------

上面這些文字,主要一點就是說明了,有些行為是編譯器完成的,而且還有一些
詭秘。但是我們要知道編譯器做了那些,那些是要完成自己做的。重要的一點,
就是我們學會如何去簡單使用typedef定義類型.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.