gpt4 book ai didi

c++ - 字符数组和指针的混淆

转载 作者:行者123 更新时间:2023-11-30 04:02:51 25 4
gpt4 key购买 nike

我的问题是关于我正在研究的指针算法。

在学习过程中,当我将一个整数数组的地址赋给一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com