指针递增递减递减语法差异

时间:2014-12-23 19:38:28

标签: c++ c pointers

当我在网站上处理指针时,我坚持一点。

当我编写给定的例子时,我可以在指针上分配数组的地址,以增加像ptr = arr;这样的指针示例,并且它可以正常工作,但是当我为减量示例执行相同的操作时,它并没有&#39 ;只有当我这样写ptr = &arr[2]时才能工作。为什么我必须为减量例子编写&符号?这两者有什么区别?

int main()
{
    int arr[3]={10,20,30};
    int *ptr,i;

    ptr=arr;

    for(i=0;i<3;i++)
    {
        printf("adress of variable arr[%d] %x\n",i+1,ptr);
        printf("value of arr[%d] = %d\n",i+1,*ptr);
        ptr++;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:2)

您不必编写它,只需使用指针:

 ptr = var + 2 ;

for(i=0;i<3;i++)
{ 
    printf("%d" , *ptr ) ;
    ptr-- ;

请注意,最后一个元素位于+2而不是+3。

答案 1 :(得分:2)

如果int arr[3]&arr[0]arr指向相同的事物,那么数组的基地址,或者地址是数组中的第一个元素。这就是为什么在你的增量的情况下,你被允许写ptr = var,这只不过是将起始地址存储在一个单独的指针中。

如果是减量,则没有任何东西可以将直接指向数组结尾元素地址。因此,您必须使用地址的最后元素 [&arr[n-1]n作为大小]来表示最后一个元素的地址。

答案 2 :(得分:1)

区别在于“减量”情况下您使用[]。可以将arr视为对整个数组的引用,因此可以(编译方式)执行具有相同结果的ptr=arrptr=&arr。另一方面,arr[3]是对数组中对象的引用,因此您需要显式获取其地址(不需要编译器优化)。