array的默认值
Default values of array
我很好奇。当我试图打印这些未定义的值时,它们是如何在这里显示的?
我认为一个未定义的数组的值等于0。
代码:#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
// your code goes here
int log[][4];
int addOne=0;
for(int i=0;i<7;i++)
{
log[addOne][0]=11+i;
log[addOne][1]=11+i;
//log[addOne][2]=11+i;
log[addOne++][3]=11+i;
}
for(int i=0;i<11;i++)
{
printf("log[%d][0] = %dn", i, log[i][0]);
printf("log[%d][1] = %dn", i, log[i][1]);
printf("log[%d][2] = %dn", i, log[i][2]);
printf("log[%d][3] = %dn", i, log[i][3]);
}
return 0;
}
输出:log[0][0] = 11
log[0][1] = 11
log[0][2] = 1
log[0][3] = 11
log[1][0] = 12
log[1][1] = 12
log[1][2] = -1217403463
log[1][3] = 12
log[2][0] = 13
log[2][1] = 13
log[2][2] = -1081953076
log[2][3] = 13
log[3][0] = 14
log[3][1] = 14
log[3][2] = -1081953088
log[3][3] = 14
log[4][0] = 15
log[4][1] = 15
log[4][2] = -1216726312
log[4][3] = 15
log[5][0] = 16
log[5][1] = 16
log[5][2] = -1219603196
log[5][3] = 16
log[6][0] = 17
log[6][1] = 17
log[6][2] = 6
log[6][3] = 17
log[7][0] = -1216729360
log[7][1] = -1216729468
log[7][2] = -1081952888
log[7][3] = -1217105850
log[8][0] = -1216726312
log[8][1] = -1216764868
log[8][2] = -1216758952
log[8][3] = 0
log[9][0] = -1217100393
log[9][1] = -1216548864
log[9][2] = -1216546512
log[9][3] = 1
log[10][0] = -1081952912
log[10][1] = -1216623457
log[10][2] = -1216546072
log[10][3] = -1217997256
是否有一种方法可以初始化每个索引的0值?
非常简单
int log[][4] = {{0}};
但是你的代码将是可怕的错误,因为你没有分配足够的空间为这么多的值1,因此,它将调用未定义的行为。
如果你想要,你需要
#include <stdio.h>
int
main(void)
{
int values[11][4] = {{0}};
int addOne = 0;
for (int i = 0 ; i < 7 ; i++) {
values[addOne][0] = 11 + i;
values[addOne][1] = 11 + i;
values[addOne++][3] = 11 + i;
}
for (int i = 0 ; i < 11 ; i++) {
printf("values[%d][0] = %dn", i, values[i][0]);
printf("values[%d][1] = %dn", i, values[i][1]);
printf("values[%d][2] = %dn", i, values[i][2]);
printf("values[%d][3] = %dn", i, values[i][3]);
}
return 0;
}
并且不要使用log
作为标识符,因为它是math.h header中的自然对数函数。
未初始化2值不会自动初始化为0
,除非它们被声明为static
,或者当它们处于全局作用域时。这样做是出于性能原因,将值初始化为0
以覆盖零需要不必要的工作,您应该感谢您只初始化了最终值。
有一个函数,在strings.h头也可以做到这一点,但它很少对0
以外的东西有用,除了字符数组。这是因为您可以设置任意字节数,因此您不能使用该函数将值1
设置为int
s数组中的每个元素。例如,它是
void *memset(void *s, int c, size_t n);
尽管第二个参数是int
,但它只能设置字节,正好是n
字节。
同样重要的是要提到,正如@user3386109和@NathanOliver对你的问题的评论所指出的那样,你真的不能这样做
int values[][4];
,因为这样就不可能知道数组的大小。您应该指定缺失的大小,或者像我在这个答案的开头所做的那样添加一个初始化器。这是一个结果,当然也是非法的语法。
1实际上它是一个大小为1的数组,数组的大小为4
2不是undefined,这是另一回事
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 函数不返回默认值
- 具有公共范围与专用范围的默认值的C++的不同行为
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- array的默认值