1d数组的地址实际上被视为
a[i]=*(a+i);
2d数组的地址是否计算为
a[i][j]=**(a+i+j);
答案 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)
没有。 a
和a[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`