为啥函数没有得到动态数组? (我正在使用指针和引用)

Posted

技术标签:

【中文标题】为啥函数没有得到动态数组? (我正在使用指针和引用)【英文标题】:Why the function do not get the dynamic array? (I am using pointers and references)为什么函数没有得到动态数组? (我正在使用指针和引用) 【发布时间】:2018-02-18 09:19:55 【问题描述】:

我正在学习动态数组,但出现此错误:

数组下标的无效类型'int int'

我不知道我的错误是传递数组还是使用指针。因为如果我在“capt”函数中打印数组,程序会正确运行,但我想学习使用动态数组并将其用作参数。

/*Dynamic Arrays without global variables*/

#include <iostream>
#include <stdlib.h>

using namespace std;


/*Function's prototype*/
void capt(int*, int*); //get variables for ref. and use pointers
void show(int, int);   //Only get variabless

int main()
    int nc=0, calf;

    capt(&nc,&calf);
    show(calf,nc);  


    system("pause");
    return 0;

/*Functions*/
void capt(int* nc, int *calf)
    cout<<"Digite el numero de calificaciones:"; cin>>*nc;
    system("cls");
    calf = new int [*nc];

    for(int i=0;i<*nc;i++)
        cout<<"Ingrese la nota "<<i+1<<": "; cin>>calf[i];
    


void show(int calf, int nc)
    system("cls");
    cout<<".: Notas del usuario :."<<endl;
    cout<<"Asignaturas evaluadas: "<<nc<<endl;


    for(int i=0;i<nc;i++)
        fflush(stdin);
        cout<<"Nota "<<i+1<<": "<<*calf[i]<<endl; //<---Error Here
    

【问题讨论】:

calf = new int [*nc]; 重新分配 local 指针,它不会修改传入的参数。同样在 C++ 中,您应该更喜欢使用 std::vector 并通过引用传递而不是传递指针(尽可能) 没关系,我是新手,因此我不知道 std::vector,我将阅读此内容以最有效地使用数组。谢谢 =) 【参考方案1】:

你搞砸了。这里

void show(int calf, int nc)

那么这里

cout<<"Nota "<<i+1<<": "<<*calf[i]<<endl; //<---Error Here

正如您在第一个 sn-p 中看到的,calf 是一个整数,然后在第二个 sn-p 中您正在使用数组索引访问它(您还有一个不必要的 * 取消引用操作)。

还有这个:

calf = new int [*nc];

使局部变量calf指向一个新的内存地址,它不影响原来的变量;即使它确实如此,尽管原始变量 calfint 所以你又在这里搞砸了。


我认为你所追求的是这样的(尝试阅读 C++ 中对指针的引用以了解我所做的更改):

#include <iostream>
#include <stdlib.h>

using namespace std;


/*Function's prototype*/
void capt(int* nc, int *&calf); //get variables for ref. and use pointers
void show(int*, int);   //Only get variabless

int main()
    int nc=0;
    int *calf;

    capt(&nc,calf);
    show(calf,nc);  


    system("pause");
    return 0;

/*Functions*/
void capt(int* nc, int *&calf)
    cout<<"Digite el numero de calificaciones:"; cin>>*nc;
    system("cls");
    calf = new int [*nc];

    for(int i=0;i<*nc;i++)
        cout<<"Ingrese la nota "<<i+1<<": "; cin>>calf[i];
    


void show(int *calf, int nc)
    system("cls");
    cout<<".: Notas del usuario :."<<endl;
    cout<<"Asignaturas evaluadas: "<<nc<<endl;


    for(int i=0;i<nc;i++)
        fflush(stdin);
        cout<<"Nota "<<i+1<<": "<<calf[i]<<endl;  
    

【讨论】:

哦,好的,我明白了,我要阅读有关 reference to pointers 我的错误是理论上的,我不知道这个话题。感谢程序运行正确=)。 @JavierGámezBojórquez 或者首先了解什么是 C++ 中的 reference 类型,然后引用指针。祝你好运。

以上是关于为啥函数没有得到动态数组? (我正在使用指针和引用)的主要内容,如果未能解决你的问题,请参考以下文章

通过C中的void函数返回动态数组

为啥我不能在我的结构中打印名称?

go语言,为啥range循环取的指针地址和直接用数组取的指针地址不一样,求指教

C++原生指针,引用与智能指针

调整动态分配的指针数组的大小(复制构造函数不起作用?)

下面引用compare的时候为啥加*,compare不是返回值是0和1吗?