2015-07-24 2 views
1

Я запускаю эту программу для вычисления точечного произведения двух векторов ... Я использую * sum в качестве результата, но после инициализации его до нуля значение никогда не обновляется после моего цикла ?Указатель не обновляет значение

extern "C" { 
    void attempt2(double * x , double * y, int * len , double * sum , int * ToF){ 
     *sum = 0; 
     for (int i = 0; i < *len ; i++){ 
      *sum += x[ i ]*y[ i ]; 
     } // 
    } 
} 

Тогда я назову это в R, используя .C.

x <- c(1.1, 2.1, 3.9) 
y <- c(3.0, 1.1, 7.2) 
len <- length(x) 
Tf <- TRUE 
lst <- .C("attempt2", x = x, 
      len = len, 
      sum = as.numeric(0), 
      ToF = as.logical(Tf)) 
lst 

Есть ли что-то очевидное, я поступаю неправильно?

+0

Вы не передаете y своей функции – demonplus

+0

Один из аргументов - «попытка2» и у отсутствует – demonplus

+0

, почему вам нужен ToF, вы не используете его в функции? – demonplus

ответ

0

Вы должны добавить у аргументов:

lst <- .C("attempt2", x = x, y = y, 
      len = len, 
      sum = as.numeric(0), 
      ToF = as.logical(Tf)) 

Также не уверен, что вам нужно ToF вообще.

Смежные вопросы