记忆在二维数组中的位置?

时间:2015-02-18 19:03:44

标签: c arrays memory location

在C中,数组中的位置a [i]等于*(a + i)。但是,对于二维数组a [i] [j],什么是等效指针?我到了 (a +((i (第二个数组的大小)+ j)),但这似乎不是一个明确的答案。

3 个答案:

答案 0 :(得分:2)

排名a[i]*(a+i)

排名a[i][j]*(*(a + i) + j)

请记住,二维数组是一个数组数组。因此*a+0指向第一个数组,*a+1指向第二个数组,依此类推。

简化......

*(*a+1) = *(*(a + 0) + 1 ) = *(a[0] + 1) = a[0][1]

答案 1 :(得分:1)

a[i][j] is *(a[i] + j) or  *(*(a + i) + j)

答案 2 :(得分:0)

您的索引:

*(a + ((i(size of the second array) + j))

用于2D矢量,如果在连续存储器中分配2D数组,则可以像下面的示例中那样进行索引:

float *I = (float*)malloc(n*n*sizeof(float));
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        if(i==j) I[i*n+i]=1.0;
            else I[i*n+j]=0.0;
}
}

它是连续内存块中的单位矩阵。