私はポインタとCの一般的な点でかなり新しいです。Cポインタ2次元上へ移動
void moveUpToTop(int num, int dim, int index) {
int i,j;
double *temp = w[index];
double *zero = w[0];
for(i = index; i > 0; i--) {
double *ptrA = w[i];
double *ptrB = w[i - 1];
for(j = 0; j < dim; j++) {
*(ptrA + j) = *(ptrB + j);
}
}
for(j = 0; j < dim; j++) {
*(zero + j) = *(temp + j);
}
}
これを2次元配列wとすると、double ** wと定義されます。ポインターを使用して配列の先頭にインデックス "インデックス"を持つ配列値を移動したいのですが、これは私たちがしなければならない課題です。
まず、アレイの場所の1つを保存しています。次に、すべての配列の場所を1つ上に移動します。 私は何が間違っていますか?
私には、ソート機能を設計するために次のコードがあります。
double **w;
int main (void) {
int dim, num;
int i, j;
scanf ("%d %d", &dim, &num);
w = calloc (num, sizeof (double *));
for (i = 0; i < num; i++) {
w[i] = calloc (dim + 1, sizeof (double));
int sum = 0;
for (j = 0; j < dim; j++) {
scanf ("%le", &w[i][j]);
sum += w[i][j] * w[i][j];
}
w[i][dim] = sqrt(sum);
}
sort(num, dim);
for(i = 0; i < num; i++) {
for(j = 0; j < dim; j++) {
printf("%e ", w[i][j]);
}
printf("\n");
}
return 0;
}
'double **'は2次元配列を定義しません。ポインタへのポインタです。それは配列のように振る舞います。 – StoryTeller
'double **'は2次元配列ではなく、1つを指すことはできません。必要に応じて2D配列を使用します。 [ask]を読んで、[mcve]を提供してください。 – Olaf
「配列の先頭までインデックス "インデックスを持つ配列値を移動する"とはどういう意味ですか? – user2357112