字符数组和指针的混淆

时间:2014-07-19 20:36:34

标签: 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;
    ptr = &a[0];
    for(int i = 0; i < 5; i++)
    {
        cout << ptr << endl;
        ptr++;
    }
    getch();
}

输出:

hello
ello
llo
lo
o

我原以为会打印相应数组元素的地址。

1 个答案:

答案 0 :(得分:2)

看起来Turbo C ++库的 iostream 类将void*视为char*

要获取使用Turbo C ++打印的地址,请尝试使用此行而不是现在的行:

cout << (unsigned)ptr << endl;

注意:我没有真正测试过,因为 ISO C ++禁止递增类型&#39; void &#39; *的指针而我没有Turbo C ++ ...请记住,使用Turbo C ++,你并不是真正学习C ++,你只是用类似于现代C ++的语言学习编程,但做了一些不同的事情而且缺少一个很多当前标准的东西。


供参考,这是一个适用于 gcc 的代码:

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