比较两个指针变量

时间:2012-10-31 11:08:46

标签: c

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

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

第一个语句是保存第五个元素的地址,第二个语句语法是我第一次看到的。任何人都可以向我解释第二个陈述。并且 在执行程序j和k之后是相等的。所以他们指向同一个地方。

7 个答案:

答案 0 :(得分:3)

  

K =(ARR + 4);

意味着karr位置被指向index 0之后将指向{{1}}位置之前的4个元素。

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

enter image description here

答案 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相同。