【问题标题】:Pointers not passing their value指针没有传递它们的值
【发布时间】:2016-06-20 02:12:59
【问题描述】:

我正在尝试解决在执行任务时发生的一个谜团。 main 和 entry 函数工作得很好,但一般的函数不行。在检查变量是否为常量和数组大小时,似乎它们并没有像我取消引用它们时那样传递它的值。

是的,我是指针新手,所以任何建议都会很棒。

代码如下:

#include <iostream>
using namespace std;
void entry(int &size, int *arraysize, int &c, int *constant, int *firstArray, int *secondArray);
void average(int &size, int &c, int *arraysize, int *constant, int *firstArray, int *secondArray);
void newarray();
void output();
int main() {
    int size;
    int *arraysize;
    int c;
    int *constant;
    int *firstArray;
    int *secondArray;
    entry(size, arraysize, c, constant, firstArray, secondArray);
    average(size, c, arraysize, constant, firstArray, secondArray);
}

void entry(int &size, int *arraysize, int &c, int *constant, int *firstArray, int *secondArray) {
    cout<<"Enter the size of the array: ";
    cin>>size;
    arraysize = &size;
    cout<<"array size: "<<*arraysize<<endl;
    cout<<"Enter the constant c: ";
    cin>>c;
    constant = &c;
    cout<<"constant c size: "<<*constant<<endl;
    firstArray = new int[*arraysize];
    secondArray = new int [*arraysize];
    for (int i=0; i<*arraysize; i++) {
        cout<<"Enter the "<<i+1<<" element of the first row: ";
        cin>>firstArray[i];
    }
    for (int i=0; i<*arraysize; i++) {
        cout<<"Enter the "<<i+1<<" element of the second row: ";
        cin>>secondArray[i];
    }
}

void average(int &size, int &c, int *arraysize, int *constant, int *firstArray, int *secondArray) {
    cout<<"Array size: "<<*arraysize<<endl;
    cout<<"Constant: "<<*constant<<endl;
}

当程序达到平均功能时,它向我显示了这种错误 http://i.imgur.com/esF9c04.png

【问题讨论】:

  • 所以你问为什么例如int *arraysize 参数不允许您在 main 中更改 int *arraysize;

标签: c++ arrays pointers


【解决方案1】:

在被调用者中修改参数不会影响调用者的局部变量,除非修改的参数是引用。

像在 int 参数中一样使用引用。

像这样修改原型声明和函数定义:

void entry(int &size, int *&arraysize, int &c, int *&constant, int *&firstArray, int *&secondArray)

【讨论】:

    【解决方案2】:

    您的代码中有一些错误。

    当您想将值发送到函数/过程并保存其更改时:

    仅在 C++ 中:

    • 对于变量:接收 int &variable 和发送 send(variable)
    • 对于数组:当接收 int *array 和发送 send(array)

    在 C 中:

    • 对于变量:接收 int *variable 和发送 send(&variable)
    • 对于数组:当接收 int *array 和发送 send(array)

    【讨论】:

    • 不,传递&amp;arraysize 会导致编译器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2014-12-09
    • 1970-01-01
    • 2016-12-25
    • 2012-01-16
    • 2011-07-28
    相关资源
    最近更新 更多