以下では、型定義を使用します。
typedef float zreal;
typedef float* zvect;
typedef float** zmatr;
zvect
全長が列付きn
のaとして再キャストしたいとします(もちろんそれが分割されていると仮定します)。「オブジェクト」は、行ごとに値をパックします。つまり、はタイプの場所です(行ベクトルとして考えられます)。これを次のように変換する必要があります。zmatr
m
m
n
zvect
zmatr
a = [a1 a2 ... ap]
a
zvect
zmatr
zmatr = [a1
a2
...
ap]
ここで、a1,...,ap
は行ベクトルを表します。(値を新しいエンティティにコピーすることなく)自分zvect
をに再キャストする方法はありますか?zmatr
そうするための最も効率的な方法は何ですか?ベクトルを直接使用して行列の値にアクセスすることは避けたいことに注意してください。つまり、wherereturnsのようz[getIndex(i,j,ncols)];
になりgetIndex(int i,int j, int ncols)
ますi*ncols+j
。任意の提案をいただければ幸いです。
更新:次のコードがその役割を果たしているようです:
zvect v;
create_vector(&v,100);
zmatr zm;
zmatr* matrix = &zm;
*matrix = (zmatr)malloc(sizeof (zvect) * 10);
int i;
for (i = 0; i < 10; ++i) {
(*matrix)[i] = &(v[i*10]);
}