以下では、型定義を使用します。
typedef float zreal;
typedef float* zvect;
typedef float** zmatr;
zvect全長が列付きnのaとして再キャストしたいとします(もちろんそれが分割されていると仮定します)。「オブジェクト」は、行ごとに値をパックします。つまり、はタイプの場所です(行ベクトルとして考えられます)。これを次のように変換する必要があります。zmatrmmnzvectzmatra = [a1 a2 ... ap]azvectzmatr
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]);
}