【问题标题】:c++ - function requires c style array [closed]c ++ - 函数需要c样式数组[关闭]
【发布时间】:2017-06-22 13:49:58
【问题描述】:

我需要在我的 c++ 代码中使用一些静态 c 库。 我有很多看起来像这样的函数(这里我使用这个库中的一个非常简单的例子来创建一个关于 z 轴的旋转矩阵和天使 alpha):

void Rz(double alpha, double r[3][3])

最后,r 应该是最终的矩阵。 我试着这样调用函数:

double alpha = 1.234;
double R[3][3] = {}; 
iauRz(alpha, R);
for(int i = 0; i<3; ++i){
    cout  << "    "  << R[i][0] << " " << R[i][1] << " "  << R[i][2] << "\n";
}

我希望显示旋转矩阵,但这不起作用。我的结果是:

0 0 0
0 0 0
0 0 0

我如何调用函数有错误吗?我不熟悉这种 c 风格的数组...

编辑:该库提供了一些非常复杂的功能,围绕 z 轴的旋转只是一个示例。这意味着不可能使用更多 c++ 风格的库。 编辑 2:索引已更改

【问题讨论】:

  • 索引在 c++ 中为 0。这些数组的元素位于索引 0、1 和 2。
  • 您访问的内存超出了数组的范围:R[i][3]
  • R[i][1] &lt;&lt; " " &lt;&lt; R[i][2] &lt;&lt; " " &lt;&lt; R[i][3] &lt;&lt; "\n"; 更改为R[i][0] &lt;&lt; " " &lt;&lt; R[i][1] &lt;&lt; " " &lt;&lt; R[i][2] &lt;&lt; "\n";
  • 你调用库函数的方式是可以的,根据函数的描述。问题出在其他地方。

标签: c++ arrays function


【解决方案1】:

您正在使用从 1 开始的索引。在 C/C++ 中,索引从 0 开始

for(int i = 0; i<3; ++i){
    cout  << "    "  << R[i][0] << " " << R[i][1] << " "  << R[i][2] << "\n";
}

【讨论】:

  • 谢谢,这是一个愚蠢的小错误。我修复了它,但它仍然没有改变 R 的值
  • 我看到你声明R 没有任何分配,然后你将它传递给iauRz(alpha, R);iauRz 是否应该更改 R 的值?你是写了那个函数(那么,你能发布函数定义吗?)还是它来自外部库(那么是哪个?)?
【解决方案2】:

几乎所有语言的索引都是零,这是有原因的:C++(和 C)中的 R[i] 也可以写成

*(R + i * sizeof(datatype))

这意味着“将 R 的内存地址增加 i 倍于数组的数据类型的大小,并获取该地址的值”,因此将数组的第一个对象放在 R[0 是非常有意义的],因为这是R的内存地址加0字节,所以第一个元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2014-05-27
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多