尝试将指针从结构中分配给二维数组

问题描述 投票:0回答:1

有一个我应该使用以下结构的作业:

typedef struct natset{
        unsigned long min;
        unsigned int size;
        unsigned char* bits;
}natset_t;

现在我必须将该指针分配给以下二维无符号字符数组:

unsigned char bArrayRoll[7][byteNum];

我试过这样做:

unsigned long min = 20;
unsigned int size = 20;
unsigned char bArrayRoll[7][byteNum];

natset_t newNatset;
newNatset.min = min;
newNatset.size = size;
newNatset.bits = &bArrayRoll;

我尝试过的newNatset.bits的变化包括:

newNatset.bits = bArrayRoll;
newNatset.bits* = &bArrayRoll;

但是,编译器返回“从不兼容的指针类型分配”或“从不兼容的指针类型初始化”。

如何正确地将位指针分配给此数组?

c arrays pointers
1个回答
0
投票
newNatset.bits* = &bArrayRoll;

你试图将newNatset.bitsbArrayRoll的地址相乘,这是未定义的行为。

newNatset.bits = bArrayRoll;

这里的这个试图将unsigned char (*)[byteNum]分配给unsigned char*,这也是关于哪个编译器抱怨的东西。类型明显不兼容。

正确一个(根据编译器正确一个)

newNatset.bits = bArrayRoll[0];

wouldn't it have to be: newNatset.bits = bArrayRoll[0][0]?

这又是一种不兼容的类型。您正在将unsigned char分配给unsigned char*。你可以这样做,

newNatset.bits = &bArrayRoll[0][0];

Trying to Assign Pointer out of a struct to a two-dimensional array? (The thing you wanted).

然后你需要这样做,

  unsigned char (*p)[byteNum] = bArrayRoll;

但在结构中你宣称bitsunsigned char*类型而不是unsigned char (*)[byteNum]类型。

好吧,如果你不明白我们在最后一个案例中分配了什么,以及类型是如何匹配的 - 那么这是关键的想法。

2d数组衰减到指向第一个元素的指针 - 这是byteNum无符号字符的单维数组。现在我们再将它分配给p

unsigned char (*)[byteNum]
               ^ ^
               1 2
\-----------/ 
        3

Pointer to (1) an array of bytenum (2) unsigned characters (3).
© www.soinside.com 2019 - 2024. All rights reserved.