我在C中遇到一个程序并看到指针比较程序。我不明白的是这两个陈述。
j=&arr[4];
k=(arr+4);
第一个语句是保存第五个元素的地址,第二个语句语法是我第一次看到的。任何人都可以向我解释第二个陈述。并且 在执行程序j和k之后是相等的。所以他们指向同一个地方。
答案 0 :(得分:3)
K =(ARR + 4);
意味着k
在arr
位置被指向index 0
之后将指向{{1}}位置之前的4个元素。
数组名称衰减到指向它的零索引的指针。通过添加4意味着它将指向第5个元素。
答案 1 :(得分:1)
这是臭名昭着的指针算术!该语句只是在arr
指向的地址处分配元素的地址,在右边分配4个元素的偏移量。 arr + 4
指向arr[4]
的地址。
答案 2 :(得分:1)
这只是指针算术,与C的索引< - >指针差异等价混合。
前者意味着表达式arr + 4
导致arr
(数组的名称)衰变成一个指向数组第一个参数的指针。换句话说,arr == &arr[0]
是真的。
后者就是这个等价,对于任何指针a和整数i:
a[i] === *(a + i)
这意味着第一个表达式j
的赋值可以读作j = &(*(a + 4))
,这使得(非常)清楚它只是将索引为4的元素的地址,只是正如k
行所做的那样。
答案 3 :(得分:0)
此代码使用指针算术的简单情况。它为指针k分配数组的地址(+4地址,因此它是第5个元素)。
答案 4 :(得分:0)
每个arr [4]声明都要花费(arr + 4);编译器本身的声明。
这两个是等价的,可以互换使用。
答案 5 :(得分:-1)
两者都是获取指针值的方法。
首先arr[x]
返回(x + 1)个数组内容,您可以使用&amp ;;运营商。
第二种称为指针算法,并返回arr指针的地址加上x位置,因此x + 1地址。
答案 6 :(得分:-1)
这是基本的指针算法。 k是一个指针,arr是指向数组第一个元素的指针(指向arr [0]的指针)。因此,通过向k添加4,可以将指针移动到4个元素上。因此k =(arr + 4)表示k指向arr [4],这将是第五个元素,与j相同。