我的问题是关于我正在研究的指针算术。
在研究过程中,我将整数数组的地址提供给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
我期望将打印相应数组元素的地址。
最佳答案
看起来Turbo C++库的iostream类将void*
视为char*
。
要获得使用Turbo C++打印的地址,请尝试使用此行,而不是现在的行:
cout << (unsigned)ptr << endl;
注意:我实际上没有测试过,因为ISO C++禁止递增'void'*类型的指针,而且我没有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;
}
}
关于c++ - 字符数组和指针的混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24844756/