C++ 字符数组和指针的混淆

C++ 字符数组和指针的混淆,c++,arrays,pointers,turbo-c++,C++,Arrays,Pointers,Turbo C++,我的问题是关于我正在学习的指针算术 在学习过程中,我遇到了一个奇怪的行为,当我将整数数组的地址赋给void指针并打印指针时,地址会被打印出来 但是,当我尝试将字符数组的地址赋给void指针并打印指针时,它会打印数组的条目,而不是显示它们的地址 #include <iostream.h> #include <conio.h> void main() { char a[5] = {'h', 'e', 'l', 'l', 'o'}; void *ptr;

我的问题是关于我正在学习的指针算术

在学习过程中,我遇到了一个奇怪的行为,当我将整数数组的地址赋给
void
指针并打印指针时,地址会被打印出来

但是,当我尝试将字符数组的地址赋给
void
指针并打印指针时,它会打印数组的条目,而不是显示它们的地址

#include <iostream.h>
#include <conio.h>

void main()
{
    char a[5] = {'h', 'e', 'l', 'l', 'o'};
    void *ptr;
    ptr = &a[0];
    for(int i = 0; i < 5; i++)
    {
        cout << ptr << endl;
        ptr++;
    }
    getch();
}
我希望打印相应数组元素的地址。

看起来Turbo C++库的IoSoC类类处理<代码> VUL**/COD>作为<代码> char *<代码> >

获取Turbo C++打印的地址,尝试这条线,而不是你现在有的:

cout << (unsigned)ptr << endl;
<代码> CUT> P>它看起来像Turbo C++“知道”<代码> PTR < /代码>是“真的”一个代码> char */COM>尽管您声明它“代码> Value*/Cuff>”。这就是为什么
ptr++
能够以某种方式将存储在
ptr
中的指针从
&a[0]
更改为
&a[1]
。如果它真的编译了
ptr
作为一个正确的
void*
,那么就不可能在指针上执行该算法


如果声明了
char*ptr

main
始终具有返回类型
int
,那么您看到的行为正是您应该看到的!哪个编译器?你看到的行为不是标准的,但是代码,>代码,IoSur.H./C> >甚至不是标准的C++头,而 CONIO。H/COD>完全是不必要的。是的,我是初学者,我用Turbo C++,你被它粘住了吗?如果是这样,你可能会很难在这里找到你的C++问题的帮助,因为你的编译器使用了一个我们不熟悉的标准的方言。请你这样说,獾你的学校得到GCC或Clang或者任何其他完全不是垃圾的免费编译器。
cout << (unsigned)ptr << endl;
#include <iostream>    
using namespace std;

int main()
{
    char a[5] = {'h','e','l','l','o'};

    for(int i=0; i < sizeof(a); i++)
    {
        cout << (void*)&a[i] << endl;
    }
}