2015-07-25 3 views
0

Я не понимаю, как используется указатель с матрицей a. Что происходит на *bmax = a[mm][*kp+1]? Я не практичен с указателями.c указатели, используемые в качестве индекса матрицы

kp - целочисленная переменная. Вот мой код:

double **a; 
double *bmax 
void allocation() { 
    //... 
    a = (double **) malloc((m) * sizeof(double *)); 
    for (i = 0; i <= m; i++) 
     a[i] = (double *) malloc((n) * sizeof(double)); 
} 
void something(double **a, int mm, int ll[], int nll, int iabf, int *kp, 
     double *bmax) { 
    int k; 
    double test; 

    if (nll <= 0) 
     *bmax = 0.0; 
    else { 
     *kp = ll[1]; 
     *bmax = a[mm + 1][*kp + 1]; 
     for (k = 2; k <= nll; k++) { 
      if (iabf == 0) 
       test = a[mm + 1][ll[k] + 1] - (*bmax); 
      else 
       test = fabs(a[mm + 1][ll[k] + 1]) - fabs(*bmax); 
      if (test > 0.0) { 
       *bmax = a[mm + 1][ll[k] + 1]; 
       *kp = ll[k]; 
      } 
     } 
    } 
} 
int main(){ 
    int kp; 
    for(;;){ 
       //some code 
       something(a,m+1,l1,nl1,0,&kp,&bmax); 
    } 
} 
+0

'i <=m' -->' i BLUEPIXY

+0

@andrea Это утверждение * bmax = a [mm] [* kp + 1]; является недействительным и не имеет смысла. Покажите скомпилированный пример, демонстрирующий проблему. –

+0

Где указывает 'bmax'? Я вижу глобальный 'bmax' и параметр функции' bmax', но почему? –

ответ

0

Перед тем как читать дальше один должен быть очищен с основными понятиями указателя, Взгляните на фрагмент кода:

int main() { 
    int *p; // pointer declaration 
    int a; // variable declaration 

    a = 10; // Storing the value 
    p = &a; // Storing the address of the 'a' into the memory of 'p' 

    printf("%u\n",p); // Print the value of p, address of a 
    printf("%i",*p);// Retrieve the value from the memory address saved as the value of the p, that is value of a = '10' (here) 
    return 0 ; 
} 

Теперь рассмотрим следующую строку: *bmax = a[mm + 1][*kp + 1];. Здесь *kp является указателем на int, что означает, что он извлекает целочисленное значение из сохраненного в нем адреса памяти. Аналогичным образом, *bmax является указателем , чтобы удвоить.

Поэтому, если оценивать выше уравнение, то *kp+1 является integer и поэтому mm+1. Поэтому a[integer][integer] указывает на определенное значение (если показатели действительны), который будет сохранен в памяти bmax указывает на.

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