当前位置:  开发笔记 > 编程语言 > 正文

C++程序显然打印内存地址而不是数组

如何解决《C++程序显然打印内存地址而不是数组》经验,为你挑选了1个好方法。



1> John Dibling..:

打印values不会按预期打印数组的内容,它将打印数组第一个元素的内存位置.

尝试这样的事情:

#include 
#include 

// ...

copy(&values[0], &values[MAX], ostream_iterator(cout, " "));

对不起,我无法发布实际工作代码,但您的原始帖子是一堆乱七八糟的语法和语法错误.

编辑:为了让初学者更加完整,更容易理解和理解,我写了一个小程序,说明了实现这一目标的4种方法.

方法1使用copyostream_iterator我之前所做的那样.下面的方法2可能是最基本和最容易理解的.方法3是C++ 0x方法.我知道问题是标记为C++,但我认为添加它可能是有教育意义的.方法4是使用vector和的C++方法for_each.我已经实现了一个执行转储的仿函数.

分享和享受

#include 
#include 
#include 
#include 
#include 
using namespace std;

struct dump_val : public unary_function
{
    void operator()(int val)
    {
        cout << val << " ";
    }
};

int main(){
    int vals[5] = {1,2,3,4,5};


    // version 1, using std::copy and ostream_iterator
    copy(&vals[0], &vals[5], ostream_iterator(cout, " "));
    cout << endl;

    // version 2, using a simple hand-written loop
    for( size_t i = 0; i < 5; ++i )
        cout << vals[i] << " ";
    cout << endl;

    // version 3, using C++0x lambdas
    for_each(&vals[0], &vals[5], [](int val) 
    {
        cout << val << " ";
    }
    );
    cout << endl;

    // version 4, with elements in a vector and calling a functor from for_each
    vector vals_vec;
    vals_vec.push_back(1);
    vals_vec.push_back(2);
    vals_vec.push_back(3);
    vals_vec.push_back(4);
    vals_vec.push_back(5);
    for_each( vals_vec.begin(), vals_vec.end(), dump_val() );
    cout << endl;

}


取决于你对"简单"的定义.:)就我个人而言,我通常发现使用STL算法比制作手写循环更简单,更简单.我确实承认很多C++程序员都没有意识到`copy`可以这样使用.
+1使用标准库,但这可能不是初学者最简单的方法:)
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有