将动态数组传递给C+;中的函数时出现无效转换错误+; 我是C++新手。我正在尝试编写一个程序,可以在运行程序时调整数组的大小。每次我尝试传递数组时,它都会显示“从int到int*[-fppermission]的转换无效”。我也尝试过用另一种方式来写,但这个错误仍然会出现。 下面是我写的代码:- #include <iostream> using namespace std; void resizeArray ( int p_int, int startingSize, int new_size ); void printArray ( int p_int, int new_size ); int main () { int startingSize = 3; // I set this to three in order to avoid confusion int *p_int = new int [ startingSize ]; for ( int i = 0; i < startingSize; i++ ) { cout << "Value of Element [ " << i << "] : " ; cin >> p_int [ i ]; } int userInput = 3;// I set this to three in order to avoid confusion cout << "How many more would you like to add? :" ; cout << userInput << endl; int new_size = startingSize + userInput; resizeArray ( p_int, startingSize, new_size ); for ( int i = startingSize; i < new_size; i++ ) { cout << "Value of Element [ " << i << " ] : "; cin >> p_int [ i ]; } printArray ( p_int, new_size ); delete [] p_int; return 0; } void resizeArray ( int p_int, int startingSize, int new_size ) { int *temp = new int [ new_size ]; for ( int i = 0; i < startingSize; i++ ) temp [ i ] = p_int [ i ]; delete [] p_int; p_int = temp; } void printArray ( int p_int, int new_size ) { cout << "~~ Complete Array ~~ " <<endl; for ( int i = 0; i < new_size; i++ ) { cout << "Element [ " << i << " ] = " << p_int << endl; } } #包括 使用名称空间std; void resizeArray(int p_int、int startingSize、int new_size); void printary(int p_int,int new_size); int main() { int startingSize=3;//为了避免混淆,我将其设置为3 int*p_int=新的int[startingSize]; 对于(int i=0;i

将动态数组传递给C+;中的函数时出现无效转换错误+; 我是C++新手。我正在尝试编写一个程序,可以在运行程序时调整数组的大小。每次我尝试传递数组时,它都会显示“从int到int*[-fppermission]的转换无效”。我也尝试过用另一种方式来写,但这个错误仍然会出现。 下面是我写的代码:- #include <iostream> using namespace std; void resizeArray ( int p_int, int startingSize, int new_size ); void printArray ( int p_int, int new_size ); int main () { int startingSize = 3; // I set this to three in order to avoid confusion int *p_int = new int [ startingSize ]; for ( int i = 0; i < startingSize; i++ ) { cout << "Value of Element [ " << i << "] : " ; cin >> p_int [ i ]; } int userInput = 3;// I set this to three in order to avoid confusion cout << "How many more would you like to add? :" ; cout << userInput << endl; int new_size = startingSize + userInput; resizeArray ( p_int, startingSize, new_size ); for ( int i = startingSize; i < new_size; i++ ) { cout << "Value of Element [ " << i << " ] : "; cin >> p_int [ i ]; } printArray ( p_int, new_size ); delete [] p_int; return 0; } void resizeArray ( int p_int, int startingSize, int new_size ) { int *temp = new int [ new_size ]; for ( int i = 0; i < startingSize; i++ ) temp [ i ] = p_int [ i ]; delete [] p_int; p_int = temp; } void printArray ( int p_int, int new_size ) { cout << "~~ Complete Array ~~ " <<endl; for ( int i = 0; i < new_size; i++ ) { cout << "Element [ " << i << " ] = " << p_int << endl; } } #包括 使用名称空间std; void resizeArray(int p_int、int startingSize、int new_size); void printary(int p_int,int new_size); int main() { int startingSize=3;//为了避免混淆,我将其设置为3 int*p_int=新的int[startingSize]; 对于(int i=0;i,c++,arrays,pointers,C++,Arrays,Pointers,int永远不会被神奇地解释为int*或int*&。对如下参数使用适当的类型: void resizeArray ( int*& p_int, int startingSize, int new_size ); void printArray ( const int* p_int, int new_size ); 别忘了更新公告和定义 我使用int*&p_int表示resizeArray(),因为p_int应该是指针,修改调用方的局部变量似乎是有意的 我对printary()使用了con

int
永远不会被神奇地解释为
int*
int*&
。对如下参数使用适当的类型:

void resizeArray ( int*& p_int, int startingSize, int new_size );
void printArray ( const int* p_int, int new_size );
别忘了更新公告和定义

我使用
int*&p_int
表示
resizeArray()
,因为
p_int
应该是指针,修改调用方的局部变量似乎是有意的

我对
printary()
使用了
const int*p_int
,因为传递(指向数组第一个元素的指针)应该是有意的,而修改传递的数组似乎不是有意的


另外,我猜您想在
printary()

中的printing语句中使用
p\u int[I]
而不是
p\u int
您的函数
resizeArray
printary
似乎可以处理
int*
p\u int
参数)但是作为1.参数,您使用
int
。添加
*
应该会有所帮助


如果你把你的程序作为练习来写,那没关系,但是如果你想用
c++
的方式来做,只要使用
std::vector
。你会省去很多麻烦:)

你传递的是
int
而不是
int*
int*&

void resizeArray ( int*& p_int, int startingSize, int new_size );
void printArray ( const int* p_int, int new_size );

函数的第一个参数被声明为具有类型
int

void resizeArray ( int p_int, int startingSize, int new_size );
                   ^^^^^^^^^ 
当您试图提供类型为
int*
的参数时

resizeArray ( p_int, startingSize, new_size );
              ^^^^^
第二个函数也存在同样的错误

void printArray ( int p_int, int new_size );
                  ^^^^^^^^^
但是,如果您在任何情况下都将参数类型从
int
更改为
int*
,则函数将无法按预期工作,因为参数应通过引用传递

通常情况下,数组的新大小可能小于数组的原始大小。因此,复制函数中元素的循环也不正确

正确的函数定义可以如下所示

void resizeArray ( int * &p_int, size_t starting_size, size_t new_size )
{
    int *temp = nullptr;

    if ( new_size != 0 )
    {

        temp = new int [ new_size ];

        size_t n = new_size < starting_size ? new_size : starting_size;

        for ( size_t i = 0; i < n; i++ )   temp [ i ] = p_int [ i ];
    }

    delete [] p_int;

    p_int = temp;
}
void resizeArray(int*&p\u int,size\u t start\u size,size\u t new\u size)
{
int*temp=nullptr;
如果(新尺寸!=0)
{
温度=新的整数[新的大小];
尺寸n=新尺寸<起始尺寸?新尺寸:起始尺寸;
对于(size_t i=0;i
打得好。忘了他在修改指针指向的内容。不仅仅是打字错误。我按照你的建议修改了代码,效果很好。但是请你解释一下什么是“int*&p\int”这是我第一次看到这样的情况。这意味着该参数被声明为对所提供参数的引用。您将很快了解引用。