1

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

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

3 回答 3

4

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

使用时,您将&ptr获得实际指针的地址,而不是指向的地址。删除与号(地址运算符&),所以你只有ptr.

于 2013-10-30T10:50:53.870 回答
3

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

尝试

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

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

于 2013-10-30T10:51:07.960 回答
1

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

 printf("%c%p\n",*ptr, (void*)ptr);
 //                   ^  remove & , and add void*
于 2013-10-30T10:53:01.427 回答