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++头,而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;
}
}