c++ - 在 C++ 中使用指针按引用传递数组

标签 c++ pointers reference pass-by-reference

在使用指针和引用的一些新领域中,我试图通过引用将数组传递给使用指针的函数,但是无论我尝试什么,我都会不断出错,我确信这个问题很容易解决但我似乎无法理解它,有人能看出我犯的错误吗?任何帮助都会有很长的路要走谢谢

#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdio>   
#include <cstdlib>
#include <new>

using namespace std;

//Inline function 
inline double getFahrenheit(double theCelsius)
{ 
//Convert the celcius to farenheit   
return (theCelsius + 32) * 5 / 9;  
}

void outputWeather(double *temperaturesArray, const string WEEK_DAY_NAMES[], const     double MAX_NUMBER)
{
     //this is a counter that will increment through the days and various 
     int counter;
     //reset the counter to 0 so we can use it again       
     counter = 0;
     //print a header       
     cout << "THIS WEEKS TEMPERATURE REPORT " << endl;
     //print a divider 
     cout << "=============================" << endl;
     //while the counter is less than 7 repeat again
     while(counter < MAX_NUMBER)
     {
         //print out the temperatures by day          
         cout << WEEK_DAY_NAMES[counter] << "     " << temperaturesArray[counter] << "\370C    " << getFahrenheit(temperaturesArray[counter]) <<"\370F    "<< endl;
         //increase the counter by 1
         counter +=1;  
     }
}

//Function that will determine whether or not the value the user entered was numeric     and within the range
double checkValidation(string weekDay)
{
 //Create a variable to store a valid number
 double validNumber;

 //This will hold the value for the lowest  
 const double MIN_NUMBER = 1;
 //This will hold the value for the highest temperature
 const double MAX_NUMBER = 365;
 //This will hold the value for the valid number that the user will eventually enter 
 validNumber = 0.0;

 //This will alert the user to enter a temperature for that day of the week
 cout << "Please enter the temperature for " << weekDay << endl;
 //This will take in teh value the user entered for teh temperature 
 cin >> validNumber; 

     //If the text the user entered was not numeric start again             
 if(cin.fail())            
 {
     //C++ built in methods for clearing the cin                     
     cin.clear();              
     fflush(stdin);

     //alert the user what they typed was wrong 
     cout << "invalid input. please try again and enter a numeric value" << endl; 
     //pass in the weekeday and start over
     checkValidation(weekDay);                     
 } 
 else 
 {
     //if teh number falls outside the range
     if(validNumber < MIN_NUMBER || validNumber > MAX_NUMBER)
     {
         //Alert the user that it was outside the range           
         cout << "invalid input. please try again and enter a value between -90 and 60" << endl; 
         //pass in the weekday and try again          
         checkValidation(weekDay);
     }

 }
 //return the valid number    
 return validNumber;  

}


int main()
{
    //this is a counter that will increment through the days and various 
    int counter;
    //a constant to hold the variable for the number of days
    const int MAX_COUNTER = 7;
    //an array that will hold all the days of the week
    const string WEEK_DAY_NAMES[] = 
    { 
          "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 
    };

    //this will hold all of teh temperatures
    double temperaturesArray[MAX_COUNTER]; 
    //start the counter off at 0      
    counter = 0; 

    //begin telling the user to enter temperatures by printing a header
    cout << "Please enter the temperature for every day of the week " << endl;
    //while the counter is less than 7 we will repeat
    while(counter < MAX_COUNTER)
    {                                                       
    //add temperature to the array 
    temperaturesArray[counter] = checkValidation(WEEK_DAY_NAMES[counter]); 
    //add 1 to the counter            
    counter +=1;                     

    }

    double * arrayPointer = new double[MAX_COUNTER];

    arrayPointer = &temperaturesArray;

    outputWeather(arrayPointer, WEEK_DAY_NAMES, MAX_COUNTER);       

system("PAUSE");
return 0;              
}

最佳答案

在 C++ 中,数组的大小被编码到它的类型中。

没有通用的“ double 数组”类型。但是有“7个 double 数组”类型和“13个 double 数组”类型等等。

因此,要将数组作为数组传递给函数,而不仅仅是作为指针传递给函数,您需要在函数的签名中对精确类型进行编码。

它不会是“一个接受数组的函数”,而是“一个接受大小为 7 的数组的函数”。

方法如下:

void f(double (&arr)[7]);

当然,如果数组大小不固定,你可以模板化它:

template <size_t N>
void f(double (&arr)[N]);

但实际上,您根本不应该使用原始数组来完成您尝试做的事情。

使用标准库 vector 。

关于c++ - 在 C++ 中使用指针按引用传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15601912/

相关文章:

c++ - gcc 发出的这个越界警告是错误的吗?

c++ 使用子类

c - 不打印时变量地址不对齐

.net - 如何使用程序集绑定(bind)重定向来忽略修订和内部版本号

c++ - 意外的引用行为

C++ 使用 copy_if

c - 链表和堆栈以及段错误

c - 如何使用指针获取数组的索引

PHP - 通过引用传递可变数量的参数

c++ - &= 运算符的评估(短路)