繁体   English   中英

字符数组和指针的混淆

[英]Confusion of character array and pointer

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

在学习期间,我将整数数组的地址提供给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;
    }
}

看起来Turbo C ++“知道” ptr确实是一个char*尽管实际上您将其声明为void* 这就是如何ptr++是某种能够改变存储在指针ptr&a[0]&a[1] 如果确实将ptr编译为适当的void*则不可能对指针执行该算法。

如果您已声明char* ptr那么您所看到的行为正是您应该看到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM