【发布时间】:2018-06-16 09:49:00
【问题描述】:
我正在尝试这段代码:
int x[] = {1,5};
int y[] = {3,6};
int *w[] = {x,y};
int **z = w;
printf("%d", **z[1]);
cout<<**z[0];
但它不起作用。我的目标是访问 x 或 y 数组中的每个元素。我的问题来自真正的 OpenCV 代码的这一部分:
float h_ranges[] = {0, 180};
float s_ranges[] = {0, 256};
const float* ranges[] = {h_ranges, s_ranges};
想知道如何读取ranges[] 中的每个元素?
编辑:我试过了:
printf("%d", z[1][1]);
cout<<z[0][0];
它奏效了,但我很想知道为什么
printf("%d", **z[1][1]);
cout<<**z[0][1];
不工作,但下面的代码工作
printf("%d", *w[1]);
cout<<*w[0];
w 和 z 这里有什么区别?
EDIT2:
为什么是结果
printf("%d", *w[1]);
cout<<*w[0];
与以下结果相同:
printf("%d", *z[1]);
cout<<*z[0];
【问题讨论】:
-
你知道
z[1][1]是什么类型吗?如果是,为什么您认为允许在前面添加两个“星”? -
@UnholySheep:谢谢!我明白了!
-
@UnholySheep:但为什么
*w[0]和*z[0]有相同的结果仍然令人困惑?事实上我现在无法真正想象z的结构! -
**z[0] 取消引用 3 次,这就是你的 cout 不起作用的原因。
-
让我们回顾一下:*x 是 x[0] 的另一种写法,所以 **z 就像 z[0][0]。
标签: c++ element pointer-to-pointer