为什么指针没有递增?

时间:2015-05-19 20:40:17

标签: c

考虑以下代码

#include<stdio.h>
int main()
{
    int a[5];
    int *ptr=a;
    printf("\n%u", &ptr);
    ++ptr;
    printf("\n%u", &ptr);
}

On Output我得到相同的地址值,为什么指针地址没有递增。

3 个答案:

答案 0 :(得分:11)

指针正在递增。问题是你正在查看指针本身的地址。变量的地址不能改变。你的意思是查看指针的,即它存储的地址:

printf("\n%p", ptr);

答案 1 :(得分:3)

  

On Output我得到相同的地址值,为什么指针地址没有递增。

ptr的值与ptr的地址不同。

使用++ptr;,您正在更改ptr的值。这不会改变ptr的地址。创建变量后,其地址根本无法更改。

类比:

int i = 10;
int *ip = &ip;
++i; // This changes the value of i, not the address of i.
     // The value of ip, which is the address of i, remains
     // same no matter what you do to the value of i.

答案 2 :(得分:0)

让我们来看看基础知识。

当你声明一个指针变量时,你使用一个*,其中包含指向的任何类型。

当你取消引用一个指针(取这个指针指向的值)时,你将*放在它前面。

当你得到某个东西的地址(一个可以存储在指针变量中的地址)时,你可以在你试图获取地址之前放置&

我们来看看你的代码。

int *ptr=a; - ptr是一个指向int的指针,指向a的第一个元素。

printf("\n%u", &ptr);这会打印ptr的地址。由于ptr是指针,&ptr是指向指针的指针。那是您想看到的内容(据我了解),您需要删除&

++ptr;你增加了ptr的值,这没关系,但是

printf("\n%u", &ptr);仍会输出相同的内容,因为虽然指针ptr的内容已更改,但其地址却没有。

因此,您只需要使用printf替换每个printf("\n%u", ptr);来电,以获得所需的结果。