这是一个程序,我把它写成一个接一个地输出字符串的所有字符。但我也打印了阵列各个块的地址。问题是所有块的地址都相同。为什么? 有人知道吗?
#include<stdio.h>
int main()
{
char enter[]="Kinsman";
char *ptr;
ptr=enter;
int i=0;
while(*ptr!='\0')
{
printf("%c%p\n",*ptr,&ptr);
ptr++;
for(i=0;i<=100000000;i++);
}
return 0;
}
答案 0 :(得分:3)
因为你打印了实际指针的地址。
使用&ptr
时,如果指向,则获取实际指针的地址而不是地址。移除&符号(地址操作符&
),因此您只有ptr
。
答案 1 :(得分:3)
您正在打印指针的地址,而不是指针的值
尝试
printf("%c%p\n",*ptr, static_cast<void*>(ptr));
答案 2 :(得分:1)
ptr
是一个指针,它也是堆栈中具有地址的变量。这是固定的,而它所指的是ptr++
变化,因此你要打印指向的值而不是指针本身的地址。
printf("%c%p\n",*ptr, (void*)ptr);
// ^ remove & , and add void*