为什么指针为所有数组块提供相同的地址?

时间:2013-10-30 10:49:41

标签: c arrays string pointers

这是一个程序,我把它写成一个接一个地输出字符串的所有字符。但我也打印了阵列各个块的地址。问题是所有块的地址都相同。为什么? 有人知道吗?

#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;
}

3 个答案:

答案 0 :(得分:3)

因为你打印了实际指针的地址。

使用&ptr时,如果指向,则获取实际指针的地址而不是地址。移除&符号(地址操作符&),因此您只有ptr

答案 1 :(得分:3)

您正在打印指针的地址,而不是指针的值

尝试

printf("%c%p\n",*ptr, static_cast<void*>(ptr));

https://stackoverflow.com/a/18929285/259

答案 2 :(得分:1)

ptr是一个指针,它也是堆栈中具有地址的变量。这是固定的,而它所指的是ptr++变化,因此你要打印指向的值而不是指针本身的地址。

 printf("%c%p\n",*ptr, (void*)ptr);
 //                   ^  remove & , and add void*