簡體   English   中英

在 C 中使用恆定長度的二維數組作為結構成員

[英]Using a constant-length 2D array as a struct member in C

我正在嘗試在 C 中執行以下操作:

  • 在堆棧上創建一個整數的二維數組(編譯時已知維度)
  • 將數組分配為結構的成員(在其他地方的回調 function 中使用)

我嘗試使用帶有二維數組成員或指向二維數組的指針的結構 - 請參見下面的代碼。

我可能只使用用 malloc 分配的雙指針並有一個雙指針結構成員,但我試圖避免動態分配(我想了解出了什么問題)。 我也不想復制數組,因為回調 function 可能會改變數據。

#include <stdio.h>

struct numbers_struct {
    int numbers[2][3];
};

struct pointer_to_numbers_struct {
    int (*numbers)[2][3];
}

int main() {
    int numbers[2][3] = { {1,2,3},{4,5,6} };

    /* try to use struct with 2d array member
     * error: array type `int[2][3]` not assignable */
    struct numbers_struct num_struct;
    num_struct.numbers = numbers;

    /* try to use struct with pointer to 2d array member 
     * contains random/invalid data */
    struct pointer_to_numbers_struct ptr_num_struct;
    ptr_num_struct.numbers = &numbers;
}


您不能分配這樣的數組,請嘗試使用 memcpy:

memcpy(num_struct.numbers, numbers, sizeof numbers);

您可以在struct numbers_struct

struct numbers_struct num_struct = { { {1,2,3},{4,5,6} } };
struct pointer_to_numbers_struct ptr_num_struct = { &num_struct.numbers };

如果您希望結構持久,請將static添加到其定義中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM