假设我有以下C函数:

double * cross_product( double vec1[3], double vec2[3] )
   {
    double *outvec ;

     *(outvec + 0)= vec1[1]*vec2[2] - vec1[2]*vec2[1];
     *(outvec + 1)= vec1[2]*vec2[0] - vec1[0]*vec2[2];
     *(outvec + 2)= vec1[0]*vec2[1] - vec1[1]*vec2[0];
     return outvec ;
 }

为什么程序在执行时返回错误,而不是在编译阶段返回错误??
这个也不行
double * cross_product_2( double vec1[3], double vec2[3] )
   {
    double var ;
    double *outvec = &var;

     *(outvec + 0)= vec1[1]*vec2[2] - vec1[2]*vec2[1];
     *(outvec + 1)= vec1[2]*vec2[0] - vec1[0]*vec2[2];
     *(outvec + 2)= vec1[0]*vec2[1] - vec1[1]*vec2[0];
     return outvec ;
// }

最佳答案

double *outvec包含垃圾,因为您没有初始化或分配任何值
为了它。
“outvec”上的任何操作都是对垃圾的操作,因此结果也包含垃圾。
第二个代码中的更正:

     REVISED CODE
double * cross_product_2( double vec1[3], double vec2[3] )
       {
        double *outvec = NULL; // new change
        outvec = (double *)malloc(sizeof(double)*3); //since you need space for 3
                                                    //doubles


     /*
           *(outvec + i) means, that the calculated value is to be stored at the ith
             index of the address pointed to by the outvec pointer. That is how arrays
              are indexed using pointers
     */
         *(outvec + 0)= vec1[1]*vec2[2] - vec1[2]*vec2[1];
         *(outvec + 1)= vec1[2]*vec2[0] - vec1[0]*vec2[2];
         *(outvec + 2)= vec1[0]*vec2[1] - vec1[1]*vec2[0];
         return outvec ;
    // }

说明:
您已经声明了以下变量-
双*输出矢量;
“outvec”是一个指针,用于存储将存储结果的地址。作为指针,变量“outvec”将指向存储结果的地址。
但是由于您没有指定该地址,因此“outvec”点
到某个垃圾地址。
这就是为什么我们需要指定存储结果的地址,为此
我们需要用一些有效的地址初始化或分配“outvec”变量。

关于c - 用C函数将指针返回数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25814223/

10-12 06:13