Cでポインターの学習を始めたばかりで、次のコードに直面しました。
#include <stddef.h>
#include <stdlib.h>
double *vec( double a[], double b[]);
int main(){
double v1[3]={1.0,1.0,1.0};
double v2[3]={1.0,-1.0,1.0};
double *v3 = NULL;
v3 = vec(v1,v2);
printf("v1 X v2 = (%f, %f, %f)\n",v3[0],v3[1],v3[2]);
free( v3);
return 0;
}
double *vec( double a[], double b[]){
double *c=NULL;
c = (double *)malloc(3*sizeof( double ));
c[0]= a[1]*b[2]-a[2]*b[1];
c[1]=-(a[0]*b[2]-a[2]*b[0]);
c[2]= a[0]*b[1]-a[1]*b[0];
return c;
}
ここでの問題は、関数を宣言するときに、作成者がfunction(parameters)の代わりに* function(parameters)を使用したことです。なぜ彼/彼女は関数vecを宣言するためにポインタを使用したのですか?
構文を間違って読んだ。それは、doubleへのポインタとしても知られる戻り値*function
ではありません。function
double *
Cでは、動的に割り当てられた配列が必要な場合、ポインターを使用してこれを行います。また、Cは関数から配列を直接返すことを許可していないため、そのメモリへのポインタを返す必要があります。(ローカル変数が破棄されるので注意してください)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加