通过指针的2d数组表示

时间:2010-09-27 10:57:45

标签: c

1d数组的地址实际上被视为

a[i]=*(a+i);

2d数组的地址是否计算为

a[i][j]=**(a+i+j);

5 个答案:

答案 0 :(得分:4)

其他答案不太正确。它更像是:

*(*(a+i)+j)

答案 1 :(得分:2)

递归应用规则:

a[i][j] == *(a[i] + j) == *(*(a + i) + j)

答案 2 :(得分:0)

不,因为a[1][2]a[2][1]会在同一个地方。像*(a+i*n+j)这样的n-by-m数组更接近于标记(尽管我要将精确的表达式键入标记编辑器,而不是单元测试)。

答案 3 :(得分:0)

// CTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

void print (int i, int j )
{
    int a[3][3] = {
        { 1,2,3 },
        { 4,5,6 },
        { 7,8,9 }
        };
    printf ("%d\n", *(*(a+i)+j) );
    printf ("%d\n", a[i][j] );
}

int _tmain(int argc, _TCHAR* argv[])
{

    print (0,0);
    print (1,1);
    print (2,2);
    return 0;
}

返回:

1 1 五 五 9 9

*这已通过编译器运行....

答案 4 :(得分:0)

没有。 aa[i]属于不同类型(分别为int**int*)。

假设在您的示例中a被定义为int数组的数组(例如a[10][20]),当您将其传递给函数(从而将其转换为pointer to the first element of the array)时,您拥有(进一步“简化”第二阵列级别)

    a           is of type `int**`
    a[i]        is of type `int*`
    a[i][j]     is of type `int`

    *(a+i)      is of type `int*`
    a+i+j       is of type `int**`
    *(a+i+j)    is of type `int*`
    *(*(a+i)+j) is of type `int`