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

     2023-02-21     302

关键词:

【中文标题】为啥函数没有得到动态数组? (我正在使用指针和引用)【英文标题】: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 类型,然后引用指针。祝你好运。

为啥采用指针的函数优于采用数组引用的函数?

】为啥采用指针的函数优于采用数组引用的函数?【英文标题】:Whyisafunctiontakingapointerpreferredoverafunctiontakinganarrayreference?为什么采用指针的函数优于采用数组引用的函数?【发布时间】:2021-11-1903:18:30【问题描述】:考虑以下... 查看详情

为啥在为数组指针重载运算符+和=时会得到奇怪的输出[重复]

】为啥在为数组指针重载运算符+和=时会得到奇怪的输出[重复]【英文标题】:WhywouldIobtainweirdoutputwhenoverloadingoperator+and=forarraypointer[duplicate]为什么在为数组指针重载运算符+和=时会得到奇怪的输出[重复]【发布时间】:2021-06-0508:2... 查看详情

为啥我的动态分配的数组没有保存正确的值?

】为啥我的动态分配的数组没有保存正确的值?【英文标题】:Whyisn\'tmydynamicallyallocatedarrayholdingthecorrectvalues?为什么我的动态分配的数组没有保存正确的值?【发布时间】:2017-04-2904:49:32【问题描述】:我们正在讨论我学校的课... 查看详情

为啥在函数中使用已发布变量的更新值没有得到反映?

】为啥在函数中使用已发布变量的更新值没有得到反映?【英文标题】:Whyisthepublishedvariable\'supdatedvaluenotgettingreflectedwhenusedinfunction?为什么在函数中使用已发布变量的更新值没有得到反映?【发布时间】:2021-03-2817:31:54【问题描... 查看详情

为啥在使用单指针传递给函数时必须对二维数组进行类型转换?

】为啥在使用单指针传递给函数时必须对二维数组进行类型转换?【英文标题】:whywemusttypecastthe2Darraywhenpassingtofunctionusingsinglepointer?为什么在使用单指针传递给函数时必须对二维数组进行类型转换?【发布时间】:2014-08-1405:47:3... 查看详情

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

】为啥我不能在我的结构中打印名称?【英文标题】:HowcomeIcan\'tprintthenameinmystructure?为什么我不能在我的结构中打印名称?【发布时间】:2019-03-1422:51:20【问题描述】:我正在读取具有名称ID和等级的数据文件,并将信息存储在... 查看详情

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

】调整动态分配的指针数组的大小(复制构造函数不起作用?)【英文标题】:Resizingadynamicallyallocatedarrayofpointers(CopyConstructornotworking?)【发布时间】:2017-10-0421:05:06【问题描述】:在我提出问题之前,让我先介绍一下我的程序存... 查看详情

为啥我在 python 的 sklearn 中使用管道和没有管道得到不同的值

】为啥我在python的sklearn中使用管道和没有管道得到不同的值【英文标题】:WhydoIgetdifferentvalueswithpiplineandwithoutpiplineinsklearninpython为什么我在python的sklearn中使用管道和没有管道得到不同的值【发布时间】:2019-09-0409:26:51【问题描... 查看详情

尝试使用动态内存分配创建节点指针数组

...能。typedefstructintdata;myNode;在我试图创建节点指针数组的函数中,我写了类 查看详情

指针/引用数组?

...除旧数组。这部分是明白的,但我不明白的是如何保持对函数将使用的数组的引用。这是我用于创建新数组并在元素上移动的代码。intnewSize=m_size*2;doub 查看详情

为啥 C++ 没有指向成员函数类型的指针?

】为啥C++没有指向成员函数类型的指针?【英文标题】:Whydoesn\'tC++haveapointertomemberfunctiontype?为什么C++没有指向成员函数类型的指针?【发布时间】:2009-01-2017:08:52【问题描述】:我在这里可能完全错了,但据我了解,C++并没有... 查看详情

函数在不删除动态数组的情况下工作。程序有效且没有错误

】函数在不删除动态数组的情况下工作。程序有效且没有错误【英文标题】:Functionworkswithoutdeletingthedynamicarray.Programworksandhasnoerrors【发布时间】:2016-05-2310:36:21【问题描述】:我是C++的学生和初学者。目前在课堂上我们正在练... 查看详情

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

...于获取动态内存分配得到的地址、减少数据拷贝操作(如函数传参)等。引用是c++有而c没有的语法,引用在语义上是等价于被引用对象,对引用的操作即是对被引用对象内存的操作。引用在底层是指针,但是在行为上与指针不... 查看详情

指向对象和继承对象的指针数组

...ass(...);(所有代码底部的最后一行)。错误说“没有构造函数实例cSClass::cSClass与 查看详情

为啥我能够更改数组 [关闭]

】为啥我能够更改数组[关闭]【英文标题】:WhyamIabletochangethearray[closed]为什么我能够更改数组[关闭]【发布时间】:2020-01-0719:59:05【问题描述】:我正在为考试而学习,然后我在网上看到了这个。我的问题是,数组不是基本上是c... 查看详情

无法使用指针添加数组元素

...数组中。我正在试验指针,所以我想将它们用作用户定义函数的参数。当我运行代码时,只要输入数组的前两个值,就会得到错误:exited,segmentationfault。我痛苦地不知道自己做错了什么。#include 查看详情

为啥我对朋友函数有未定义的引用?

】为啥我对朋友函数有未定义的引用?【英文标题】:WhydoIhaveanundefinedreferencetofriendfunction?为什么我对朋友函数有未定义的引用?【发布时间】:2017-10-2502:43:14【问题描述】:在我目前的编程课程中,我们正在编写一个程序来创... 查看详情

如何使用 C++ 中的指针动态分配和解除分配二维数组?

...其中每个指针都指向一个int,这就是我想做的方式。这些函数是bool类型,因为无论操作是否成功,我都想 查看详情