考虑以下代码
#include<stdio.h>
int main()
{
int a[5];
int *ptr=a;
printf("\n%u", &ptr);
++ptr;
printf("\n%u", &ptr);
}
On Output我得到相同的地址值,为什么指针地址没有递增。
答案 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);
来电,以获得所需的结果。