C {0}是什么意思?
下面的{0}是什么意思 一个零字符的数组?但是我不认为可以用较小的数组初始化较大的数组,或者可以吗?它是int,不是char,所以至少会引起一个警告,对吗?还是我完全误解了?这是否会导致缓冲区的第一个字符被清零C {0}是什么意思?,c,C,下面的{0}是什么意思 一个零字符的数组?但是我不认为可以用较小的数组初始化较大的数组,或者可以吗?它是int,不是char,所以至少会引起一个警告,对吗?还是我完全误解了?这是否会导致缓冲区的第一个字符被清零 struct ring_buffer { unsigned char buffer[SERIAL_BUFFER_SIZE]; volatile unsigned int head; volatile unsigned int tail; }; ring_buff
struct ring_buffer
{
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile unsigned int head;
volatile unsigned int tail;
};
ring_buffer rx_buffer = { { 0 }, 0, 0 };
{0}
表示此结构或数组的“zero init”。在上面的示例中,rx_buffer.buffer将被全部零字节填充,而不是此时堆栈上发生的任何事情
以下内容也可用于将整个环形缓冲区结构初始化为所有零字节:
ring_buffer rx_buffer = {0};
{0}
表示此结构或数组的“zero init”。在上面的示例中,rx_buffer.buffer将被全部零字节填充,而不是此时堆栈上发生的任何事情
以下内容也可用于将整个环形缓冲区结构初始化为所有零字节:
ring_buffer rx_buffer = {0};
以以下格式初始化数组:
char数组={value1,value2,…}代码>
在C语言中,如果数组(或结构)长度大于用于初始化的值的数目,则编译器会自动将其余值初始化为0
同样,您也可以初始化结构。在您的例子中,由于第一个元素是数组,因此它被初始化为all0
的数组
因此,要解释:ring_buffer rx_buffer={{0},0,0}代码>
这将声明类型为struct ring\u buffer
的结构变量rx\u buffer
,并将其所有元素初始化为零。由于第一个元素本身就是一个数组,因此它的初始化方式与常规数组的初始化方式相同。您可以使用以下格式初始化数组:char array={value1,value2,…}代码>
在C语言中,如果数组(或结构)长度大于用于初始化的值的数目,则编译器会自动将其余值初始化为0
同样,您也可以初始化结构。在您的例子中,由于第一个元素是数组,因此它被初始化为all0
的数组
因此,要解释:ring_buffer rx_buffer={{0},0,0}代码>
这将声明类型为struct ring\u buffer
的结构变量rx\u buffer
,并将其所有元素初始化为零。由于第一个元素本身就是一个数组,因此它的初始化方式与常规数组的初始化方式相同。它的意思是uchar的zero init数组(所有元素0)
rx_buffer.buffer={0}它是uchar的平均零初始数组(所有元素0)
rx_buffer.buffer={0}但是我不认为可以用较小的数组初始化较大的数组,或者可以?
如果数组部分初始化,则未初始化的元素将接收相应类型的值0
这可能对你有帮助
但是我不认为可以用较小的数组初始化较大的数组,或者可以吗?
如果数组部分初始化,则未初始化的元素将接收相应类型的值0
这可能对你有帮助
用{0}初始化变量意味着用零填充它。这是一种向代码的审阅者显式显示变量已归零的方法。您的初始化是给其他开发人员的消息,而不是给编译器的消息,因为没有初始化的静态变量默认初始化为0
但是,如果后面跟的是非零值,则它将具有不同的含义。例如:
struct ring_buffer {
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile unsigned int head;
volatile unsigned int tail;
};
ring_buffer rx_buffer = { { 0 }, 1, 2 };
这意味着缓冲区
用零填充,头
初始化为1,尾
初始化为2
可能代码的作者认为有一天代码可能会以这种方式更改,并将其显式化,以避免将来可能出现的错误。用{0}初始化变量意味着用零填充它。这是一种向代码的审阅者显式显示变量已归零的方法。您的初始化是给其他开发人员的消息,而不是给编译器的消息,因为没有初始化的静态变量默认初始化为0
但是,如果后面跟的是非零值,则它将具有不同的含义。例如:
struct ring_buffer {
unsigned char buffer[SERIAL_BUFFER_SIZE];
volatile unsigned int head;
volatile unsigned int tail;
};
ring_buffer rx_buffer = { { 0 }, 1, 2 };
这意味着缓冲区
用零填充,头
初始化为1,尾
初始化为2
可能代码的作者认为有一天代码可能会以这种方式进行更改,并将其明确化,以避免将来可能出现的错误。“
在这种情况下也会做同样的工作。内部的{0}
似乎真的是为了读者/维护者的利益而进行了更多的表达,如果表达式的整个RHS只包含{0}
,而不是{0},0,0}
“我不认为”——那么隐式的情况已经是这样了——可能想得少一些,多阅读文档?“至少会引起一个警告”--您是否期望charc='x'代码>生成警告'x
'在C.@JimBalter中是一个int,有一天过得不好?“
在这种情况下也会做同样的工作。内部的{0}
似乎真的是为了读者/维护者的利益而被表达得更多,如果表达式的整个RHS仅仅由{0}
组成,那么隐式已经是这样了,与其说{0},0,0}
“我不认为”——不如少想,多读文档?“至少会引起一个警告”--您是否期望charc='x'代码>生成警告'x
'是C.@JimBalter中的一个int,今天过得不好?{0}
也会将指针初始化为空指针,因此这是初始化任何变量(包括数组和结构)的一个好方法。“{0}表示“zero init”这个结构或数组”-这不是特例<代码>{1}
表示“初始化”