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

标签 c++ arrays memory printing

#include <iostream>
using namespace std;

int main(){
    int findMax(int *);

    const int MAX = 100;
    int values[MAX];
    char ivals[256];
    // Get the space-separated values from user input.
    cin.getline(ivals, 256, '0');
    char *helper;
    // Clean input array and transfer it to values.
    for(int i = 0; i < (MAX) && ivals[i] != 0; i++){
        helper = ivals[i * 2];
            values[i] = atoi(helper);

    }

    int mval = findMax(values);
    cout << values << endl << mval;
    return 0;
}
//Function to find the maximum value in the array
int findMax(int arr[]){
    int localmax = 0;
    for(int i = 0; i < (sizeof(arr)/sizeof(int)); i++){
        if(arr[i] > localmax){
            localmax = arr[i];
        }
    }
    return localmax;
}

该程序的目的是让用户输入一系列以空格分隔的值,以 0 结尾。然后分析该数组以找到最大值。我想出了如何将最初是 char[] 的内容转换为 int[] 以便我可以在其上使用 findMax() 函数而不会出错,但是排序循环似乎有其自身的问题,当“cout <<值 << endl << mval;"被调用时,它只返回一个内存地址,而不是一个非间隔的整数序列。谁能解释我做错了什么?看来我可能在使用指针时犯了一些错误,但我不知道是什么。

最佳答案

打印 values 不会像您期望的那样打印数组的内容,它会打印数组第一个元素的内存位置。

尝试这样的事情:

#include <iterator>
#include <algorithm>

// ...

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

抱歉,我无法发布实际的工作代码,但您的原始帖子一团糟,存在许多句法和句法错误。

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

方法 1 将 copyostream_iterator 结合使用,正如我在上面所做的那样。 下面的方法 2 可能是最基本且最容易理解的方法。 方法 3 是 C++0x 方法。我知道这个问题被标记为 C++,但我认为添加它可能具有教育意义。 方法 4 是一种使用 vectorfor_each 的 C++ 方法。我已经实现了一个进行转储的仿函数。

分享和享受

#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;

struct dump_val : public unary_function<int,void>
{
    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<int>(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<int> 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;

}

关于C++ 程序显然打印内存地址而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678709/

相关文章:

c++ - 将 cmake 构建选项导出到外部项目

javascript - Float32Array 在与 WebGL (Chrome) 交互时不更新 ArrayBuffer 以反射(reflect)分配的值

python - Python文档和实现中“内存中 "object’s地址的细微差别”

python - Python 有堆栈/堆吗?内存是如何管理的?

c - 如何使用 mmap 映射文件,同时在文件之前分配一个空页?

c++ - 将 REG_BINARY 数据转换为 REG_TZI_FORMAT

c++ - 如何检查我们是否在 SQLite 中的事务中?

c++ - 逗号运算符和逗号分隔符有什么区别?

c - 数组的 gcc 内联 asm 输入和输出参数?

arrays - 制作一个包含字符串和整数范围的数组合并