- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
以下代码给出了“无效的初始值设定项”错误:
int a[]=(1,2,3);
但以下编译成功,尽管它认为','是逗号运算符而不是分隔符:
int a[][2]={(1,2),(3,4)};
那么为什么 ()
对一维数组无效而不对二维数组无效?
最佳答案
在第一个例子中:
int a[]=(1,2,3);
初始化器是一个(相当奇怪的)int
类型的表达式。 (它包含两个逗号运算符,并产生值 3
。)该对象是一个数组。初始化无效,因为它是类型不匹配。
第二个:
int a[][2]={(1,2),(3,4)};
相当于:
int a[][2] = { 2, 4 };
这是有效的,因为允许在初始化程序中省略嵌套的花括号;元素用于初始化对象的连续元素。第一个和第三个逗号是逗号运算符;第二个是分隔符。
如果初始值设定项只是目标类型的表达式(无论是标量、结构还是 union ),则最外层的花括号可选。例如,你可以这样写:
int x = 42;
int y = { 42 };
对于指定元素值(对于数组、结构或 union 对象)的初始化程序,需要最外面的大括号。
例如:
struct foo {
int x;
int y;
};
struct foo arr[2] = { 1, 2, 3, 4 };
是有效的——但更清楚地写成:
struct foo arr[2] = { { 1, 2 }, { 3, 4 } };
除了第一个例子无效外,两个都是糟糕的风格。第一个可能是:
int a[] = { 1, 2, 3 };
第二个:
int a[][2] = { 2, 4 };
或
int a[][2] = {{1, 2}, {3, 4}};
取决于意图。
关于c - 带大括号的一维和二维数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394660/
我正在按照 PCL 文档的教程计算 2D 凸包 see here . 我有一片云和一些指数,将它们投影到具有给定系数的平面上,然后计算凸包。这是代码: PointCloud::Ptr tmpInlie
我想使用模拟退火在某个预定义的区间内找到单变量多项式函数的局部最小值。我也想尝试找到二次函数的全局最小值。 像这样的无导数算法不是解决问题的最佳方法,因此仅供学习。 虽然算法本身非常简单,但我不确定如
我正在寻找任意值的 2 维和 3 维索引的快捷方式,我知道这适用于给定数组 a[] #define a(i,j,k) a[(i)*span*span+(j)*span+(k)] #define b(i
我有一个形状为 [12, 8, 5, 5] 的 numpy 数组。我想修改每个元素的第 3 维和第 4 维的值。 例如 import numpy as np x = np.zeros((12, 80,
我是一名优秀的程序员,十分优秀!