如何返回乙個帶有指標的二維陣列,乙個指向二維陣列的指標

發布 時尚 2024-02-29
19個回答
  1. 匿名使用者2024-01-26

    二維陣列實際上是陣列的陣列,因此指向二維陣列的指標是指向陣列的指標。 考慮到這一點,選擇返回型別很簡單。

    由於指向陣列的指標編寫起來很麻煩,因此可以先定義乙個型別,然後使用定義的型別來定義函式返回值型別:

    typedef int (*pointertoarray8)[8];

    pointertoarray8 ret2darray()static int arr2d[8][8];

    return arr2d;

    如果不想定義,可以直接寫出來,但好像有些誇張:

    int (*ret2darray())8] {static int arr2d[8][8];

    return arr2d;

    最後,請注意,我在這裡使用的是 arr2d 中的靜態變數,因為自動變數的陣列是在函式返回後釋放的,不能再使用。

  2. 匿名使用者2024-01-25

    假設陣列定義如下:int a[2][3];

    如果你想使用乙個函式來做到這一點,可以這樣寫,例如:

    #include

    #include

    void func(int a[3])

    int i,j;

    for (i = 0; i < 2; i++)for (j = 0; j < 3; j++)a[i][j] = i + j;

    return;

    void print(int a[3])

    int i,j;

    for(i = 0; i < 2; i++)for(j = 0; j < 3; j++)printf("%d ", a[i][j]);

    printf("");

    return;

    int main()

    int a[2][3];

    func(a);

    print(a);

    system("pause");

  3. 匿名使用者2024-01-24

    例如,二維陣列是。

    int ia[2][3]=;

    int (*p)[3]=ia;

    就這麼簡單,請注意指標的內部是乙個二維數字。

  4. 匿名使用者2024-01-23

    只需返回陣列名稱並自行手動處理下標即可。

  5. 匿名使用者2024-01-22

    定義乙個陣列指標,並用指標返回它。

  6. 匿名使用者2024-01-21

    int(*p)[10] 定義乙個指向二維陣列的指標 p,為其分配 10 個長度,並將陣列 a 的值分配給 (*p)[10]。

    請注意,這裡的 a 陣列是 5 行 10 列,將 (*p)[10] 放入 a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9] 放入 (*p)[0],並以同樣的方式, 把 a[1][0....9] 改為 (*p)[1]。

    最後,(*p)[10] 中只有五行值初始化為 a 陣列的值。

    在這種情況下,p 和 p[0] 的意思相同,即陣列 a 的起始位址,相當於 cout include

    #include "iostream"

    using std::cout;

    using std::endl;

    using std::hex;

    void main()

    int a[5][10]=;

    int (*p)[10]=a;

    cout0012feb8

    0012feb8

    #include

    #include "iostream"

    using std::cout;

    using std::endl;

    using std::hex;

    void main()

    int a[5][10]=;

    int (*p)[10]=a;

    cout<<*p0012feb8

    這就是 p 和 p[0] 之間的區別所在。 由於 *p 不是標頭元素的值,因此它等價於 p[0]。 那麼如何通過 p 獲取第乙個元素的值,顯然,你應該再新增乙個 * 運算子,如下所示:

    cout<<*p“ 輸出自然是 1,就像 (*p)[0] 一樣。

  7. 匿名使用者2024-01-20

    1. 你的浮點陣列被定義為乙個有 3 行 4 列的二維浮點陣列,陣列的元素是浮點數。 如果你改變格式並寫清楚!

    float score[3][4]=,,}

    在呼叫期間,score 是陣列的第乙個位址,指向浮點陣列。 陣列的分數 + 1 分。

    2. 浮點數 *p 定義指向浮點數的指標。 這個是一維的。

    在呼叫期間,浮點數指向 xx。 浮點數。

    這兩個定義不同,因此在引數傳遞過程中會發生錯誤。

    3. 你的浮點數 (*p)[4] 被定義為指向四個元素的浮點陣列的指標。

    在呼叫期間,float 指向由四個浮點數組成的陣列。

    在這種情況下,兩個定義是相同的,因此引數傳遞中沒有錯誤。

    第四,有個建議,你的程式編寫格式不清晰,不利於你的糾錯修改,應盡量清晰明確,不建議使用簡化的方式來定義引數。

    作為軟體工作者,要盡量使程式流暢、格式清晰、易讀,這是軟體工作者最基本的職業素質。

    格式化後,程式會更清晰,如下所示:

    #include

    void main(),search(score,2);

    void search(float (*p)[4],int n) *這裡似乎有 float *p 的問題*

    printf("");}

  8. 匿名使用者2024-01-19

    p[0] 指向陣列 A 的起始位址。

    p[9] 字段指標。

  9. 匿名使用者2024-01-18

    有兩種方法可以用指標表示二維陣列:

    1.動態陣列法。

    完全由動態資料組成的二維陣列。 例如,通過首先分配 m 個一維指標空間,然後在每個一維指標上分配 n 個元素的空間,將 n 行和 n 列的 m 的陣列分配給動態二維陣列。

    與普通陣列不同,這個動態二維陣列的行之間的位址不是連續的。

    #include

    int **create(int m, int n) 在行 m 中建立乙個包含 n 列的二維陣列。

    2. 通過陣列指標指向現有的二維陣列。

    對於已定義的 n 行和 n 列陣列,可以使用指向 n 個元素的陣列指標指向陣列並訪問該陣列。

    int a[10][5];

    int (*p)[5];每行 5 個元素的陣列指標。

    p=a;將 p 點指向 a。

  10. 匿名使用者2024-01-17

    二維陣列可以被認為是指向指標的指標,b = **b;

    例如:b[2][5];

    它是 2 行 5 列的二維陣列,也可以看作是二級指標,第一級儲存行指標,然後每行指標實際上指向 5 列元素。

    *(b+i)+j), *b+i) 是先取行指標,然後取 +j 偏移到所需列,然後取 * 的值得到第 i 行中 j 列的資料。

  11. 匿名使用者2024-01-16

    是這樣的,int b[2][3]=; 這假設 i=1;

    b+1 表示移動到下一行,但它的型別是 (*p)[3](您可以通過將 b+1 分配給 *p[3] 並嘗試再次分配 *p 來了解這一點); 在第乙個星號之後,他指向他剛剛移動到的行中第乙個元素的位址,然後 +j 是 b[1][j] 的位址,水平移動到 j 列,最後乙個星號是取他的值。 這是我的分析。 如果不在裡面新增星號,它是 (b+i)+j,它只會繼續向下移動(行),而不是在列的方向上。

  12. 匿名使用者2024-01-15

    * (b+i)+j), (b+i) 是陣列的行位址,* b+i)+j) 是陣列的列位址,整個 * (b+i)+j) 表示 b[i][j] 上的內容!

    b[i]+j),b[i]等價於*(b+i),(* b+i))j]等價於b[i][j],不知道大家聽懂不懂?

  13. 匿名使用者2024-01-14

    二維陣列本質上是陣列的陣列。

  14. 匿名使用者2024-01-13

    在 C 語言中,有兩種基本方法可以將二維陣列作為函式引數傳遞給指標

    1. 傳遞“陣列指標”。

    include void output( int (*pa)[3], int n ) 這個函式只能輸出乙個 n 行 3 列的二維陣列}void main(),int i; int *pa[2]; for( i=0;i<2;i++ pa[i]=a[i]; output(pa, 2, 3);}

  15. 匿名使用者2024-01-12

    a[i] 在形式上是 a 陣列中的第 i 個元素。 如果 a 是一維陣列的名稱,則 a[i] 表示陣列 a 的第 i 個元素所佔據的記憶體單元的內容。 A[i] 有乙個實體地址並占用乙個儲存單元。

    但是,如果冰雹陷阱 a 是二維陣列,則 a[i] 是一維陣列的名稱。 它只是乙個位址(就像一維陣列名稱只是乙個指標常量一樣。 a、a+i、a[i]、*a+i)、*a+i) + j、a[i]+j 都是位址。

    a[i]+j) 和 *(*a+i)+j) 是二維陣列元素 a[i][j] 的值。

    下面是乙個示例:

    int a[3][4]=;

    a,*a;第 0 行開頭的位址和第 0 行中第 0 列的元素位址 a[0],*a+0);第 0 行,第 0 列,元素位址 a[0], &a[0][0]; 第 0 行中元素的位址以及第 0 行和第 0 列中元素的位址 元素位址 a[1], a+1; 第 1 行 0 元素位址和 1 行前導位址 a[1][0], *a+1)+0;1 列 0 行元素位址 a[2],*a+2);2 行和 0 列元素位址。

    a[2],a+2;第 2 行元素開頭的位址。

    a[1][0],*a+1)+0);第 1 行的第 0 列中元素的值。

  16. 匿名使用者2024-01-11

    這相當於陣列越界後隨機生成的數字對應的位址! p[3] 仍然等於 a[3]。 只是此時 A 陣列已經越界了,編譯器立即給出了數字。

  17. 匿名使用者2024-01-10

    p 是指向一維陣列的指標陣列,可以訪問二維陣列。 陣列中的元素數為 4; 如果定義了 int(*p)[3]; int a[3][4] 二維長度將不一致!! 但是,二維陣列元素是連續儲存的,int(*p)[3],並且陣列將作為 3 列訪問,而不是定義的 4 列。

    p[3] 超出了 int a[3][4] 的範圍,*p[3] 是預設的隨機值。 *(p[3]+i) i=0,1,2,3 都在 int a[3][4] 的範圍之外。

  18. 匿名使用者2024-01-09

    首先,p 是指標陣列名稱,其元素是一級指標,陣列名稱是指向一級指標(即二級指標)的指標。

    二維陣列可以被認為是由四個元素組成的一維陣列,其數量為 3。

    p 有四個元素,而二維陣列 A 每行只有三個元素,所以相對於 a,p 有乙個越界的陣列,並且 p[3] 的值是乙個隨機值(p[3] = a[0][3],對於 a,a[0][3] 不存在,所以 p[3] 變成乙個隨機位址值,字段指標要小心), 並將指向記憶體中的位址。

  19. 匿名使用者2024-01-08

    同行,這個問題困擾了我很久了,我也是新手,所以還是不明白!

    p 儲存了 p[0] 的位址,p+1 儲存了 p[1] 的位址!

    你應該已經注意到,a 和 a[0] 的內容和位址是完全一樣的,所以只能理解為 a 只是 a[0] 的另乙個名字!

    同樣,p 是 p[0] 的別名,而 a+1 和 a+2 都是 a[1]。A[2], p+1, p+2 是 p[1] p[2] 的別稱!

    p=a,我們認為運算 a[0] 給出 p[0],p=a,這也意味著 p+1=a+1,p+2=a+2,並將 a[1]a[2] 分配給 p[1]、p[2]。

    但是如果沒有 a+3,則不會分配 p+3,因此 p[3] 應該指向陣列後面的一段記憶體,但它不屬於陣列!

    我想這就是我目前能說的!

    但矛盾還是很多,其中之一就是 a 和 a[0] 的內容和位址是一樣的,為什麼 p=a 改成了 p=a[0],報錯了!

    我只是乙個初學者,所以當我以同樣的困惑表達我的意見並讓大師們看到時,我忍不住笑了,慷慨大方!

    小夥伴們,一起在女生裡學習吧! 也許有了廣闊的視野,這些問題就會得到解決!

    你有什麼問題嗎,也許我們可以討論一下?

相關回答
6個回答2024-02-29

找到病毒的位置後,使用刪除命令。 /

8個回答2024-02-29

用羊毛做娃娃。

1.將紗線分成長短小段,夾在中間對折,然後固定在發縫上。 建議來回縫製數次,避免開針。 >>>More

6個回答2024-02-29

很簡單,裙子的字和衣服的字。

沿著線條和摺痕畫 你畫過畫布嗎? >>>More

9個回答2024-02-29

這裡有人,你可以去看看。

9個回答2024-02-29

披薩食譜。

成分:麵粉。 >>>More