Arrays 如何将指针指定给结构中的数组? typedef结构 { uint8_t(*标志)[5]; }t型; 无效设置状态(类型*驱动程序,uint8标志) { 驱动程序->标志[标志]=1; } void printall(类型\u t*驱动程序) { 对于(int a=0;a标志[a]); } } int main(int argc,字符**argv) { 静态类型_t驱动器[1]; uint8_t(*状态)[5]={0}; 驱动程序->标志=状态; 设置状态(驱动器,2); printall(驱动程序); }

Arrays 如何将指针指定给结构中的数组? typedef结构 { uint8_t(*标志)[5]; }t型; 无效设置状态(类型*驱动程序,uint8标志) { 驱动程序->标志[标志]=1; } void printall(类型\u t*驱动程序) { 对于(int a=0;a标志[a]); } } int main(int argc,字符**argv) { 静态类型_t驱动器[1]; uint8_t(*状态)[5]={0}; 驱动程序->标志=状态; 设置状态(驱动器,2); printall(驱动程序); },arrays,c,pointers,struct,Arrays,C,Pointers,Struct,我想将本地数组指针分配给结构中的数组指针 但我似乎无法让它发挥作用。。 谢谢。您的局部变量状态也是指向数组的指针。我想你是想声明一个实际的数组?然后将指向该数组的指针指定给结构中的字段?不管怎样,这就是课文所说的。您的初始值设定项的编写方式是0而不是NULL,并且周围有额外的{},我认为您认为您确实声明了一个数组(那么*?)是什么意思呢 现在,通常不声明指向整个数组的指针,而是声明指向与数组元素相同类型的指针。因此,结构字段将是: uint8_t states[8]; 然后你就可以写了 uin

我想将本地数组指针分配给结构中的数组指针 但我似乎无法让它发挥作用。。
谢谢。

您的局部变量
状态
也是指向数组的指针。我想你是想声明一个实际的数组?然后将指向该数组的指针指定给结构中的字段?不管怎样,这就是课文所说的。您的初始值设定项的编写方式是0而不是NULL,并且周围有额外的{},我认为您认为您确实声明了一个数组(那么
*
?)是什么意思呢

现在,通常不声明指向整个数组的指针,而是声明指向与数组元素相同类型的指针。因此,结构字段将是:

uint8_t states[8];
然后你就可以写了

uint8_t* flags;  // points to first of 8 consecutive values
这就意味着


虽然
driver
是一个1的数组,但将其称为那样的指针是非常奇怪的。如果只有一个元素,那么将其设置为数组有什么意义?

您的局部变量
states
也是指向数组的指针。我想你是想声明一个实际的数组?然后将指向该数组的指针指定给结构中的字段?不管怎样,这就是课文所说的。您的初始值设定项的编写方式是0而不是NULL,并且周围有额外的{},我认为您认为您确实声明了一个数组(那么
*
?)是什么意思呢

现在,通常不声明指向整个数组的指针,而是声明指向与数组元素相同类型的指针。因此,结构字段将是:

uint8_t states[8];
然后你就可以写了

uint8_t* flags;  // points to first of 8 consecutive values
这就意味着


虽然
driver
是一个1的数组,但将其称为那样的指针是非常奇怪的。如果只有一个元素,那么把它做成一个数组有什么意义呢?

似乎有用,

也许我需要工作

driver->flags= states;

似乎很有效,

也许我需要工作

driver->flags= states;

问题在于这种说法

koala@K-desktop:~/Workspace/koala-home/15-Stack/01-20210310$ gcc -o hello.exe hello.c 
koala@K-desktop:~/Workspace/koala-home/15-Stack/01-20210310$ ./hello.exe 
DEBUG
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
DEBUG
INIT DONE 0x7ffeb3406143 FIRST VALUE 5 
INIT DONE 0x7ffeb340613f FIRST VALUE 4 
INIT DONE 0x7ffeb340613c FIRST VALUE 3 
INIT DONE 0x7ffeb340613a FIRST VALUE 2 
INIT DONE 0x7ffeb3406139 FIRST VALUE 1 
INIT DONE 0x7ffeb3406143 FIRST VALUE 5 
INIT DONE 0x7ffeb340613f FIRST VALUE 4 
INIT DONE 0x7ffeb340613c FIRST VALUE 1 
INIT DONE 0x7ffeb340613a FIRST VALUE 2 
INIT DONE 0x7ffeb3406139 FIRST VALUE 1 
您正在为地址分配1。相反,你应该这样做

driver->flags[flag] = 1;
但是,您需要有一个标志指向的有效内存。因此,需要使用malloc()标志


问题在于这种说法

koala@K-desktop:~/Workspace/koala-home/15-Stack/01-20210310$ gcc -o hello.exe hello.c 
koala@K-desktop:~/Workspace/koala-home/15-Stack/01-20210310$ ./hello.exe 
DEBUG
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
NULL >> 0x559eeef4e040
DEBUG
INIT DONE 0x7ffeb3406143 FIRST VALUE 5 
INIT DONE 0x7ffeb340613f FIRST VALUE 4 
INIT DONE 0x7ffeb340613c FIRST VALUE 3 
INIT DONE 0x7ffeb340613a FIRST VALUE 2 
INIT DONE 0x7ffeb3406139 FIRST VALUE 1 
INIT DONE 0x7ffeb3406143 FIRST VALUE 5 
INIT DONE 0x7ffeb340613f FIRST VALUE 4 
INIT DONE 0x7ffeb340613c FIRST VALUE 1 
INIT DONE 0x7ffeb340613a FIRST VALUE 2 
INIT DONE 0x7ffeb3406139 FIRST VALUE 1 
您正在为地址分配1。相反,你应该这样做

driver->flags[flag] = 1;
但是,您需要有一个标志指向的有效内存。因此,需要使用malloc()标志


为什么要声明这样的指针?长度-“有限”指针是非常无用的。您正在尝试的确切语句是什么,它具体在哪里?请不要让我们“猜猜”。都分类好了,谢谢各位。你们为什么要声明这样一个指针?长度-“有限”指针是非常无用的。您正在尝试的确切语句是什么,它具体在哪里?请不要让我们“猜猜”。都分类好了,谢谢大家。谢谢,是的,这很有意义。使其成为一个固定大小的数组的目的是避免使用malloc,因为这需要符合misra,而且这只是实际实现的一个小例子。谢谢,是的,这是有意义的。将其设置为固定大小数组的目的是避免使用malloc,因为这需要符合misra,而且这只是实际实现的一个小例子。我试图在结构内部的“镜像”数组中放置指向每个数组元素的指针,但正如JDługosz所指出的,我只需要一个指向数组第一项的相同类型的指针。使用一维数组没有什么错,同时避免使用malloc(),内存的分配方式是相同的,一个是在编译时定义的,另一个是在运行时定义的。谢谢我试图在结构内部的“镜像”数组中放置一个指向每个数组元素的指针,这将是
(uint8_t*)标志[8]这是一个由8个指针组成的数组。您编写了一个指向8个整数数组的指针。我试图在结构中的“镜像”数组中放置一个指向每个数组元素的指针,但正如JDługosz所指出的,我只需要一个指向数组第一项的相同类型的指针。使用一维数组没有什么错,同时避免使用malloc(),内存的分配方式是相同的,一个是在编译时定义的,另一个是在运行时定义的。谢谢我试图在结构内部的“镜像”数组中放置一个指向每个数组元素的指针,这将是
(uint8_t*)标志[8]这是一个由8个指针组成的数组。您编写了一个指向8个整数数组的指针。