c語言傳遞二維數組

來源:互聯網
上載者:User

很早以前,還是學c語言的時候,,當我把,資料類型,常量變數,語句控制,函數,指標,結構體,自訂資料類型,還有一些簡單人遞迴,研究完的時候,本以為c語言學的能及格了..那天看到一本c語言的書.令我不敢相信,將近1000頁的書..感到很是驚異,那麼厚的書只有在c++,java這樣庫比較多的語言的書中才能看到..

最後得出結論,我的c語言還沒及格,,,

 

偶然遇到一個c語言傳遞二維數組的問題..以前學的時候沒有想到...試著做了一個...並不是自己想的那樣手到擒來的..

我開始寫的是這樣的:

 

#include<iostream>

using namespace std;

 

typedef vector<int> cn;

 

void show(int n1, int n2 ,int *p[])

{

    for(int i=0;i<n1;i++)

    {

        for(int j=0;j<n2;j++)

        {

            p[i][j]++;

            cout<<p[i][j]<<" ";

        }

 

        cout<<endl;

    }

 

}

 

int main()

{

    int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

    show(3,3,a);

    return 0;

}

 

結果並不是我想的那樣:提示出這樣的錯誤...

 

不能將 int (*)[]類型,賦值給,int **....

 

這讓我感到很奇怪.這兩個不是同一類形嗎.//

 

 

 

編譯器是肯定不會出錯的..那隻能是我自己的問題.

 

我馬上意識到,二維數組的名子,並不是一個單純的二級指標...

 

後來我試著這樣做,,,int **p=a;

 

一樣的錯誤,,,證明我的想法是正確的..

 

下面是我改正的程式:

 

 

#include<iostream>

#include<vector>

using namespace std;

typedef vector<int> cn;

 

void show(int n1, int n2 ,int **p)

{

    for(int i=0;i<n1;i++)

    {

        for(int j=0;j<n2;j++)

        {

            p[i][j]++;

            cout<<p[i][j]<<" ";

        }

 

        cout<<endl;

    }

 

}

 

int main()

{

    int **a;

    a=new int *[3];

    for(int k=0;k<3;k++)

        a[k] = new int[4];

 

    for(int i = 0;i<3;i++)

        for(int j=0;j<4;j++)

            a[i][j]=3;

 

    for(int i = 0;i<3;i++)

    {

        for(int j=0;j<4;j++)

            cout<<a[i][j];

        cout<<endl;

    }

    show(3,3,a);

    return 0;

}

 

 

把數組改成動態申請的,,,問題解決....

 

這說明什麼呢.:

 

直接申請,和動態審請的數組,記憶體空間的結構是不一樣的...

 

對於直接申請的數組,並不能用二級指標,找到它所有的元素的儲存地址...

 

至於它的空間是直接連續申請的..

 

 

這可能也是一些編譯器禁止傳遞二維數組吧...它是c語言(c++)開始設計二維數組的缺憾吧...

 

所以,在c++程式設計中,要避免這樣做...可以用vector等很多,好的資料結構,去代替它....

聯繫我們

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