gnuplot C ++ api如何知道指针结束的位置?

时间:2017-10-03 14:59:25

标签: c++ gnuplot

我想用C ++绘制热图,我遇到了这段代码:Plotting heatmap with Gnuplot in C++

gp.send2d(frame);函数send2d看到的所有函数都是float *,那么它如何知道维度(4x4)?或者甚至可以安全地访问16个元素?

1 个答案:

答案 0 :(得分:5)

数组的大小是其类型的一部分。在示例中,您frame的链接是float[4][4]。由于send2d()被声明为

template <typename T> Gnuplot &send2d(const T &arg)

它会将T的类型推断为float[4][4],并使arg成为对此的引用。扩大了看起来像

Gnuplot &send2d(const float (&arg)[4][4])

这表明arg是参考2d数组。这里没有指针衰减,因为我们有一个参考。

这是一个示例,显示使用引用维护数组trype而不是衰减到指针

template<typename T>
void foo(T & arr_2d)
{
    for (auto& row : arr_2d)
    {
        for (auto& col : row)
            std::cout << col << " ";
        std::cout << "\n";
    }
}


int main() 
{
    int bar[2][2] = {1,2,3,4};
    foo(bar);
}

输出:

1 2 
3 4 

Live Example