0

我正在研究指针,对此有一些疑问。

指针类型是指保存在这个指针中的地址的大小有影响。

我不知道这是正确的表达方式。

大约2维数组,

int A[100][100] = {1,2,3,.....} ;
int* x1 = &A;
int* x2 = &A[0];
int* x3 = &A[0][0];

在这种情况下,&A、& A[0]、&A[0][0] 具有相同的地址,但这些地址管理的大小不同。

例如,&A++等于address + 4byte * 100 * 100

&A[0]++ = address + 4byte * 100

但是,x1++, x2++, x3++关于该表达式的增量值都是相同的。我知道这个原因是演员阵容造成的。

那么,应i该做什么 forx1++将是与 相同的表达式&A++

4

3 回答 3

3

这些变量未正确初始化:

int* x1 = &A;
int* x2 = &A[0];

&A不是int *, 也不是&A[0]。如果您声明x1x2正确,您将在递增时获得所需的行为。

int (*x1)[100][100] = &A;
int (*x2)[100] = &A[0];
于 2019-10-30T06:59:42.770 回答
1

IfE是类型的左值表达式T,则&E是类型“指向T”( T *) 的表达式。请记住,数组的大小是其类型的一部分 -与orint [10]是不同的类型。 int [11]int [9]

表达式的类型为“( )A的百元数组的百元数组,所以表达式的类型为” ( )的百元数组的百元数组的指针,所以需要声明为intint [100][100]&Aintint (*)[100][100]x1

int (*x1)[100][100] = &A;

同理,表达式的类型为“( )A[0]的百元数组,所以 的类型为” ( )的百元数组的指针,所以需要声明为intint [100]&A[0]intint (*)[100]x2

int (*x2)[100] = &A[0];

这样,x1++将前进指向后面的下一个100x100元素数组A,同时x2++前进指向A[1]

于 2019-10-30T14:37:22.767 回答
-1

你所有的指针都是 type int *。当您增加它们时,它们将增加sizeof(int).

指针类型是指保存在这个指针中的地址的大小有影响。不。指针类型是指给定地址指向的对象的类型。

在您的代码中,要移动到下一个元素,您需要使用以下公式:

x + (number of columns)*(current row) + row

在你的情况下是 (i,j)

x + 100*i + j
于 2019-10-30T07:02:12.850 回答