在我的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