c指针用作矩阵的索引

时间:2015-07-25 18:52:03

标签: c pointers matrix

我不明白如何将指针与矩阵a一起使用。 在*bmax = a[mm][*kp+1]发生了什么?我的指针不实用。

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);
   }
}

1 个答案:

答案 0 :(得分: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+1integermm+1也是a[integer][integer]。因此,bmax指向某个值(如果索引有效),它将存储到内存> max(count1,na.rm=TRUE) [1] 202034 > min(count1,na.rm=TRUE) [1] 0 > mean(count1,na.rm=TRUE) [1] 8498.78 > summary(count1,na.rm=TRUE) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0 1555 3668 8499 8535 202000 58297 指向。