asked in 電腦與網際網路程式設計 · 1 decade ago

C/C++陣列宣告問題(急)

如果宣告一個MAP陣列

另外還有A,B,C,D 4個陣列

有沒有辦法做出能選擇的程式(例如switch)

比方選1能讓MAP=A

選2能讓MAP=B

選3能讓MAP=C

選4能讓MAP=D

有辦法可以做出這種功能嗎?

(還有個麻煩是ABCD四個陣列大小不一定相同...)

Update:

不好意思,可以解釋一下* MAP的作用以及運作方式嗎= =?

對指標沒有很懂.....

Update 2:

這樣宣告後是否之後在main裡面可以直接打MAP即可..

還是說都要打*MAP呢?

Update 3:

啊...還有...ABCD是二維陣列= =a....

Update 4:

可以解說一下int **嗎@@?...我從來沒這樣用過耶

還有..你的範例程式我可以執行,不過會有個警告

warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

這是什麼意思呢~~?

Update 5:

剛剛試了一下,假設我宣告

int **MAP;

int A[5][9];

MAP=A;

這樣他會顯示

error C2440: '=' : 無法由 'int [5][9]' 轉換為 'int **'

怎麼會這樣= =...

2 Answers

Rating
  • 流風
    Lv 4
    1 decade ago
    Favorite Answer

    #include <stdio.h>

    int main()

    {

    int * MAP;

    int A[5],B[6],C[7],D[9];

    int i;

    scanf("%d",&i);

    switch(i)

    {

    case 1:

    MAP = A;

    break;

    case 2:

    MAP =B;

    break;

    case 3:

    MAP=C;

    break;

    case 4:

    MAP = D;

    break;

    }

    return 0;

    }

    2008-11-01 08:36:21 補充:

    二維陣列

    那就把MAP宣告成int **

    讀取MAP的方法可以用陣列的方法

    像MAP[2][4]這樣

    至於原理

    陣列變數和指標變共同點是都是存放記憶體位址

    只不過陣列變數會配置連續的記憶體,大小就看你怎麼宣告

    而指標只是一個變數,跟其他一般變數一樣可以存值,只不過變數內容存的是記憶體位址,大小就是看你電腦用幾byte定址,就是多大

    這樣有比較懂嗎 不懂可再提出喔

    2008-11-01 23:38:05 補充:

    拍小,我只憑直覺打而已

    我知道得也不多,

    有請大大指正囉

    2008-11-01 23:58:47 補充:

    拍小,二維陣列會有幾個row 幾個 col的問題

    不能直接這樣用

    我想到的替代方案是動態配置記憶體

    程式碼大概如下

    2008-11-02 00:05:09 補充:

    #include

    #include

    #define aRow 3

    #define aCol 4

    #define bRow 5

    #define bCol 6

    int main()

    {

    int **MAP,**A,**B;

    A=(int **)malloc(sizeof(int*)*aRow);

    for(i=0;i

    2008-11-02 00:05:37 補充:

    B=(int **)malloc(sizeof(int*)*bRow); 

    for(i=0;i

    2008-11-02 00:12:22 補充:

    會吃字

    我貼在部落格

    http://tw.myblog.yahoo.com/jw!EhKcyiucBB9WkbH9hxMZ...

  • 1 decade ago

    流風的補充說明只說對 10% ......

    2008-11-02 00:28:41 補充:

    簡言之,你只取得陣列起始位址,但二維的維度問題呢?

    我是有解決的方法,且也實作 OK,

    但目前我處在「休答」期間,現在不可能作答,最快也得在半年後。

    不過已提示思考方向。

    2008-11-02 19:27:53 補充:

    a,b,c,d 陣列不是動態的二維陣列,

    而是事先如 a[3][5]般的宣告,或如 a[][5]={.......}般的宣告並賦予初值。

Still have questions? Get your answers by asking now.