c++ - 将指针数组传递给函数时遇到问题

标签 c++ arrays function pointers vector

在我目前正在处理的程序中,我有一个模板函数包含在一个单独的 .h 文件中,该文件从 .txt 文件中读取五列数据。数据被传递给主程序,在这个例子中我只关心数组标题“MISC_DATA”。我正在尝试确定数组“MISC_DATA”中的最大值,并编写了另一个必须将数据传递到的函数,以确定这一点。但是,编译器告诉我它无法识别函数调用“Maximum_Value”。我很确定例程调用中包含的变量 MISC_DATA 有问题,而不是函数本身。要么它不将 MISC_DATA 识别为数组,要么我的语法错误。我只包含重要的代码片段以使其更具可读性。 Read_Five_Columns 函数工作正常,它是函数“Maximum_Value”,由于指针数组 MISC_DATA 在主程序中的写入方式,编译器无法识别它。为了澄清,函数调用中的变量 MISC_DATA 是一个包含数组的 float ,变量“size_Mis”是一个包含数组大小的整数。如有任何想法,我们将不胜感激。

int main(int argc, const char * argv[]) {

#include "Use_RNG.h"
#include "Read_Columnar_File.h"
#include <fstream>
#include <iostream>

 std::vector<std::string> str3;
 std::vector<int> str4;
 std::vector<char> str5;
 std::vector<int> str6;

    unsigned long size_Mis;
    std::vector<float> MISC_DATA;  // Reads in Misc. spending data
    char File1[8];
    strcpy(File1, "Misc.txt");
    Read_Five_Columns(File1,MISC_DATA,str3,str4,str5,str6);
    str3.clear(); str4.clear(); str5.clear(); str6.clear();
    size_Mis = MISC_DATA.size();

float value;
value = Maximum_Value(MISC_DATA,size_Mis);

end_time = clock();
std::cout << std::endl << "Total Time: " << (end_time-start_time)/CLOCKS_PER_SEC << std::endl;
return 0;
}

int Maximum_Value(float *array,int array_size)
{
    float max = 0;
   for(int i =10; i < array_size-1; i++)
   {
        if(array[i] > max) max = array[i];
   }
    return max;
}

最佳答案

我在这里看到四个问题。

int main(int argc, const char * argv[]) {

#include "Use_RNG.h"
#include "Read_Columnar_File.h"
#include <fstream>
#include <iostream>

所有这些东西的顺序都是错误的。您不应该将系统头文件包含到函数体中,并且通常您在其他内容之前包含标准库内容。将其修复为如下所示:

#include <fstream>
#include <iostream>

#include "Use_RNG.h"
#include "Read_Columnar_File.h"

int main(int argc, const char * argv[]) {

其次,你没有声明Maximum_Value在你使用它之前。您需要将此函数的定义移动到 main() 的定义之前或者你需要在 main() 之前添加原型(prototype):

int Maximum_Value(float *array,int array_size);

int main(int argc, const char * argv[]) {

然后,您尝试传递 std::vector<float>作为float*这是行不通的:

value = Maximum_Value(MISC_DATA,size_Mis);

但是,因为 vector 的存储保证是连续的并且像数组一样布局,所以您可以安全地将指针传递给第一个成员:

value = Maximum_Value(&MISC_DATA[0],size_Mis);

最后,你返回int来自 Maximum_Value你应该什么时候回来float .


如果可能的话,我建议利用 std::max_element ,这是标准的一部分 <algorithm> header :

// If you don't have C++11 then use std::vector<float>::iterator instead of auto.
auto max = std::max_element(MISC_DATA.begin(), MISC_DATA.end());

现在max是最大元素的迭代器,所以 *max将是最大的float本身。

(如果输入范围为空,则 max 将等于 MISC_DATA.end() ,因此与您的函数等效的是 value = max == MISC_DATA.end() ? 0f : *max; 。)

关于c++ - 将指针数组传递给函数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849297/

相关文章:

c++ - 当通过引用传递局部变量时,c++如何处理局部变量的内存?

arrays - 包装在Option中的数组的返回迭代器

c - 为什么 *(ptr++) 不给出数组中的下一项?

javascript - 如何按降序对 JSON 数组元素进行排序?

oracle - PLS-00201 - 必须声明标识符

c++ - 初始化并使用 C++ std::string 作为 char 数组

c++ - Windows 7 64 位 shell 无法识别 Shell 扩展安装

function - 如何使用Audiokit根据频率调用函数

c++ - 访问指针指向的值

C++ 更改字符串函数中的小写字母(再次......)