矩阵连续位置的矩阵

时间:2012-02-14 23:08:33

标签: c

我经常用来记住单个矢量中的所有矩阵,因为我的书说使用单个矢量更快。并且对矩阵的访问时间较慢。 如果我有这样的代码:

int main(int argc, char **argv)
{
    int mat[10][10],i;
    for(i=0;i<10;i++)
        mat[i][0]=99;
    int *ptr=&mat[0][0];
    for(i=0;i<10;i++)
    {
        printf("%d\n",*ptr);
        ptr+=10;
    }
    return 0;
}

我尝试运行它4/5次,所有时间打印10次99次。 那么矩阵也会记忆在内存的连续位置吗?总是? 如果是,为什么访问矢量更快?

3 个答案:

答案 0 :(得分:2)

如果用“矩阵”表示二维数组,那么是的,它们在连续的记忆中。 C中的2D数组只是数组的数组(行主要)。如果用矢量表示1D数组,则没有理由它应该比访问2D数组更快。

答案 1 :(得分:1)

好吧,数组(在C中)存储在连续的内存中,由于你的mat是数组数组,它​​也存储在一个连续的内存中。我认为通过一个索引取消引用(当你有一些分离的1D数组时)可能比通过两个索引(在矩阵中)解除引用要快一些,但差别太小而不用担心。

答案 2 :(得分:1)

C没有像其他语言一样的多维数组,它称之为 multidimensional ,但它们实际上是数组的数组。

C阵列是连续的。

  

(C99,6.2.5p20)“数组类型描述了具有特定成员对象类型的连续分配的非空对象集,称为元素类型。”