0

我在 C 中遇到了一个程序,并看到了指针比较程序。我不明白的是这两个陈述。

j=&arr[4];
k=(arr+4);

第一条语句保存第五个元素的地址,第二条语句的语法是我第一次看到的。谁能解释我的第二个陈述。并且在执行程序后 j 和 k 相等。所以他们指向同一个位置。

4

7 回答 7

3

k=(arr+4);

kmean衰减为arr指向index 0.

数组名称衰减到指向它的零索引的指针。通过添加 4 意味着它将指向第 5 个元素。

在此处输入图像描述

于 2012-10-31T11:12:17.383 回答
1

这是臭名昭著的指针算法!该语句只是将元素的地址分配给指向的地址,arr并向右偏移4个元素。arr + 4指向 的地址arr[4]

于 2012-10-31T11:11:03.627 回答
1

这只是指针算术,混合了 C 的索引<->指针延迟等价。

前者意味着表达式arr + 4导致arr(数组的名称)简单地衰减为指向数组第一个参数的指针。换句话说,arr == &arr[0]是真的。

后者是这种等价性,对于任何指针 a 和整数 i:

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

这意味着第一个表达式(对 的赋值j)可以读作j = &(*(a + 4)),这使得(非常)清楚的是,它只是获取索引为 4 的元素的地址,就像该k行所做的那样。

于 2012-10-31T11:12:40.897 回答
0

每个 arr[4] 语句都扩展到 (arr+4); 由编译器本身声明。

这两个是等价的,可以互换使用。

于 2012-10-31T11:15:32.580 回答
0

这段代码使用了一个简单的指针算术案例。它将数组的地址(+4 地址,因此它是第 5 个元素)分配给指针 k。

于 2012-10-31T11:12:38.353 回答
-1

It's basic pointer arithmetic. k is a pointer, arr is a pointer to the first element of the array (a pointer to arr[0]). So by adding 4 to k, you move the pointer on 4 elements. Therefore k=(arr+4) means k points to arr[4], which would be the fifth element, and the same as j.

于 2012-10-31T11:40:46.427 回答
-1

两者都是获取指针值的方法。

首先arr[x]返回 (x+1) 数组内容,您可以使用 & 运算符获取其地址。第二个称为指针算术,返回 arr 指针的地址加上 x 个位置,即 x+1 地址。

于 2012-10-31T11:14:19.963 回答