在我的C99程序中,我有一个指向浮点数的结构(表示一个矩阵)。该结构会经历一系列例程,例如main
。使用指向常量数据的指针的替代方法?
我想确保结构的内容(矩阵中的实际值)不会被调用的例程保持不变。但是数据应该可以从main
改变。
我已经想出了以下解决方案,在那里我定义一个指针const
数据:
struct math_object {
const real_t *p_to_matrix;
};
这样做,没有所谓的例程可以改变的基础数据通过p_to_matrix
指向。
在节目的一开始我分配一些内存指向user_matrix
,我初始化值,并指向p_to_matrix
到user_matrix
使用这个(有点丑陋)铸造:
real_t *user_matrix;
... allocate memory ...
... initialize the data ...
math_object1.p_to_matrix = (const real_t *) user_matrix;
然后,我只允许用户更改user_matrix
指向的值。
是否有更好/更清洁/更安全的方式传递数据应该被认为是const
被调用的例程,但是您需要一次又一次更改相同的数据?
它不能被强制执行,但为什么不简单地声明该函数采用'const real_ *'参数?然后编译器和代码的读者都会知道该函数不会修改数据。 –
我在一个结构中有20多个矩阵,所以然后参数列表变得很长.. – Nibor
'p_to_matrix *指向一维数组,而不是矩阵(即二维数组)。除非你完全理解了所有的含义,否则不要投。说,ples提供[mcve]。目前尚不清楚你的问题是什么。 – Olaf