以下短语在C++中的含义是什么:
零初始化,
默认初始化,和
值初始化
C++开发人员应该了解他们什么?
如果我有这样的结构:
typedef struct
{
unsigned char c1;
unsigned char c2;
} myStruct;
Run Code Online (Sandbox Code Playgroud)
将此结构初始化为0的最简单方法是什么?以下是否足够?
myStruct _m1 = {0};
Run Code Online (Sandbox Code Playgroud)
或者我需要将每个成员显式初始化为0吗?
myStruct _m2 = {0,0};
Run Code Online (Sandbox Code Playgroud) 可能重复:
C和C++:自动结构的部分初始化
在阅读Code Complete时,我遇到了一个C++数组初始化示例:
float studentGrades[ MAX_STUDENTS ] = { 0.0 };
Run Code Online (Sandbox Code Playgroud)
我不知道C++可以初始化整个数组,所以我测试了它:
#include <iostream>
using namespace std;
int main() {
const int MAX_STUDENTS=4;
float studentGrades[ MAX_STUDENTS ] = { 0.0 };
for (int i=0; i<MAX_STUDENTS; i++) {
cout << i << " " << studentGrades[i] << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该计划给出了预期的结果:
0 0
1 0
2 0
3 0
Run Code Online (Sandbox Code Playgroud)
但是,将初始化值更改0.0为,例如9.9:
float studentGrades[ MAX_STUDENTS ] = { 9.9 };
Run Code Online (Sandbox Code Playgroud)
给出了有趣的结果:
0 9.9
1 …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <iostream>
struct T
{
int a, b, c;
};
int main()
{
T t = {0};
std::cout << t.a << ',' << t.b << ',' << t.c << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
0,0,0
Run Code Online (Sandbox Code Playgroud)
经过多年的代码在一个关键的生产环境中愉快地运行,提供一个重要的功能,项目的要求发生了变化,我需要输出1,1,1.
于是,我换{0}到{1}:
#include <iostream>
struct T
{
int a, b, c;
};
int main()
{
T t = {1};
std::cout << t.a << ',' << t.b << ',' << t.c << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
1,0,0
Run Code Online (Sandbox Code Playgroud)
我1,1,1反而期待了. …
这段代码是什么意思?
struct foo_t {
int a;
int b;
} foo[10] = {{0,0}}
Run Code Online (Sandbox Code Playgroud)
foo [0]是{0,0},但其余的呢?C标准如何处理这个问题?
添加.我在这里找到了一个详尽的答案.我想我的问题应该删除.
通常在C++,字符数组按以下方式初始化,
char example[5]="cat";
Run Code Online (Sandbox Code Playgroud)
如果用""(只是双引号没有空格)初始化它会怎么样?
初始化后字符数组中的元素是什么?
可能重复:
C和C++:自动结构的部分初始化
我一直在使用很长一段时间
char array[100] = {0};
Run Code Online (Sandbox Code Playgroud)
将数组的所有元素初始化为0.但是,我最近偶然发现了一个编译器(德州仪器公司的Code Composer Studio).该语句具有仅将第一个元素初始化为0的效果.
这种行为可能是C与C++的差异,编译器的差异,还是这个实现中的错误?
int main()
{
int b[2][3]={{1,2},{3,4,5}};
cout << b[0][2] << endl;
}
Run Code Online (Sandbox Code Playgroud)
视觉和g ++的结果都是0!为什么?我以为它一定是另一个号码!例如,当我们定义时,int a[5]我们说cout << a[3];没有设置a[3],它将是类似于0123984283,这意味着RAM中该单元格的最后一个值.
但在这里,原因是0什么?
如果我在C中有一个具有整数和数组的结构,如果结构是另一个结构的成员,那么如何将整数初始化为0并将数组的第一个元素初始化为0,以便对于其他结构的每个实例整数和数组有那些初始值?
#include <iostream>
using namespace std;
struct A {
// Some Other Code
int x;
};
A a1;
int main(){
A a2;
cout << "a1.x = " << a1.x << endl;
cout << "a2.x = " << a2.x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++14 标准 (ISO/IEC 14882:2014) 第 8.5 节,第 12 段:
如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储期限的对象的存储时,该对象具有不确定值,如果没有对该对象执行初始化,则该对象保留一个不确定值,直到该值被替换(5.17)。[注意:具有静态或线程存储持续时间的对象是零初始化的,参见 3.6.2。- 尾注]
那么a1有静态存储持续时间和a2自动存储持续时间吗?的定义Struct A在全局命名空间以及a1声明中,而a2声明在块范围内(在main()函数内部)。
此外,第 3.6.2 节说:
第 1 段:
作为程序启动的结果,具有静态存储持续时间的非局部变量被初始化。
第 2 段: …
这是如何运作的::
char Test1[8] = {"abcde"} ;
Run Code Online (Sandbox Code Playgroud)
AFAIK,这应该存储在Test1的内存中
a b c d e 0 SomeJunkValue SomeJunkValue
Run Code Online (Sandbox Code Playgroud)
相反,它存储为:
a b c d e 0 0 0
Run Code Online (Sandbox Code Playgroud)
初始化只在字符串文字后面添加一个尾随的NULL字符,但是如何以及为什么所有其他数组成员都被初始化为NULL?此外,关于什么是基础方法或功能的任何链接或任何概念性想法:char TEST1[8] = {"abcde"} ;将是非常有帮助的.怎么:
char Test1[8] = {"abcde"} ;
Run Code Online (Sandbox Code Playgroud)
不同于
char Test1[8] = "abcde" ;
Run Code Online (Sandbox Code Playgroud)
?
我正在使用Nordic Semiconductor的nRF51芯片编写蓝牙网格应用程序,在查看一些示例时,我偶然发现了这些代码:
nrf_mesh_address_t address = {NRF_MESH_ADDRESS_TYPE_INVALID, 0, NULL};
address.type = NRF_MESH_ADDRESS_TYPE_GROUP;
address.value = GROUP_ADDRESS;
Run Code Online (Sandbox Code Playgroud)
正如我读到的那样,这个片段address首先定义了一些变量,这些变量会立即再次更改.这个双重定义不是不必要的吗?
nrf_mesh_addrees_t看起来像这样的定义:
typedef struct
{
nrf_mesh_address_type_t type;
uint16_t value;
const uint8_t* p_virtual_uuid;
} nrf_mesh_address_t;
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是p_virtual_uuid声明const所以它在定义后无法更改,但是在将代码更改为此时我没有遇到编译错误:
nrf_mesh_address_t address;
address.type = NRF_MESH_ADDRESS_TYPE_GROUP;
address.value = GROUP_ADDRESS;
address.p_virtual_uuid = NULL;
Run Code Online (Sandbox Code Playgroud)
使用不同的变量定义变量两次有什么好处吗?
我正在研究一个使用大小为n*n的动态矩阵的幻方问题.它用数字1-n ^ 2填充矩阵,每行,列和对角线的总和必须相同.该算法的一个条件是在一个循环期间检查矩阵中的元素是否已经在其中具有数字输入.我在检查矩阵中的一个元素是否已经输入了一个数字时遇到问题,所以我想知道如何检查一个元素是否为空.
这是我的算法部分的代码:
else if(matrix[row][col] != 0)
{
row = row + 2;
col--;
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它会在包含循环的第5次迭代中触发此if语句.我已经在纸上使用魔术方法的算法进行了研究,循环的第5次迭代将它带到矩阵中的空元素.我认为如果一个元素为空它保持值0?我很感激,因为我很困惑.谢谢.