GNUPLOT C API如何知道指针在哪里结束

How does gnuplot C++ api know where a pointer ends?

本文关键字:指针 在哪里 结束 何知道 API GNUPLOT      更新时间:2023-10-16

我想在C 中绘制热图,我遇到了此代码:用c

中的gnuplot绘制热图

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

数组的大小是其类型的一部分。在示例中,您链接到framefloat[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 

实时示例