C++ 将int[]传递给参数为int的函数*
我有一个函数,它接受一个C++ 将int[]传递给参数为int的函数*,c++,pointers,arguments,C++,Pointers,Arguments,我有一个函数,它接受一个int*作为参数,但我有一个int[],我如何将参数传递给它 我使用了这种方法,但我认为它没有效率: void myFunc(int * ar); ... int main(){ int ar[]={1,2,3,4,5}; int *ar2=new int [5]; memcpy(ar2,ar,5*sizeof(int)); myFunc(ar2); } 传递数组本身会导致编译错误。您可以直接将int[]作为int*参数传递。数组可以分解为指针 此代码将
int*
作为参数,但我有一个int[]
,我如何将参数传递给它
我使用了这种方法,但我认为它没有效率:
void myFunc(int * ar);
...
int main(){
int ar[]={1,2,3,4,5};
int *ar2=new int [5];
memcpy(ar2,ar,5*sizeof(int));
myFunc(ar2);
}
传递数组本身会导致编译错误。您可以直接将int[]作为int*参数传递。数组可以分解为指针 此代码将编译:
void myFunc(int * ar);
...
int main(){
int ar[]={1,2,3,4,5};
myFunc(ar);
}
可以直接将int[]作为int*参数传递。数组可以分解为指针 此代码将编译:
void myFunc(int * ar);
...
int main(){
int ar[]={1,2,3,4,5};
myFunc(ar);
}
可以将数组转换为指针,因此可以按如下方式传递参数: myFunc(ar2) 由于ar2是一个数组,我们可以传递该数组,因为myFunc中的参数 是指向一个int的指针,它是ar2 下面是它的工作原理
#include <iostream>
#include <string.h>
using namespace std;
void myFunc(int *ar)
{
for (int i = 0; i != 5; ++i)
std::cout << *(ar + i ) << std::endl;
}
int main()
{
int ar[]={1,2,3,4,5};
int *ar2=new int [5];
memcpy(ar2,ar,5*sizeof(int));
myFunc(ar2);
delete ar2; /// dont forget to de allocate :)
return 0;
}
可以将数组转换为指针,因此可以按如下方式传递参数: myFunc(ar2) 由于ar2是一个数组,我们可以传递该数组,因为myFunc中的参数 是指向一个int的指针,它是ar2 下面是它的工作原理
#include <iostream>
#include <string.h>
using namespace std;
void myFunc(int *ar)
{
for (int i = 0; i != 5; ++i)
std::cout << *(ar + i ) << std::endl;
}
int main()
{
int ar[]={1,2,3,4,5};
int *ar2=new int [5];
memcpy(ar2,ar,5*sizeof(int));
myFunc(ar2);
delete ar2; /// dont forget to de allocate :)
return 0;
}
只需传递数组的名称,即ar,就可以实现这一点 数组的名称实际上是数组的第一个元素的地址,因此将其传递到一个函数中,该函数采用
int*ar
类型的参数就是这样做的
myFun(ar)
会做得很好 只需传递数组的名称,即ar,即可完成此操作
数组的名称实际上是数组的第一个元素的地址,因此将其传递到一个函数中,该函数采用int*ar
类型的参数就是这样做的
myFun(ar)
会做得很好 您可以将int[]
传递给带参数的函数int*
,但函数无法知道数组的长度。因此,您应该向函数中添加一个参数,如:myFunc(int*arr,int length)
您可以将int[]
传递给带参数的函数int*
,但是函数无法知道数组的长度。因此,您应该向函数中再添加一个参数,如:myFunc(int*arr,int length)
它应该编译,当我们知道错误是什么时,它会有帮助。数组自然衰减到指针,例如,当将指针作为参数传递给函数时。因此,您可以将int
数组传递给需要指向int
指针的函数。你需要详细说明你有什么问题,比如给我们一个演示你有什么问题,包括你的实际错误。例如,请参见一个函数获取指针,并传递一个数组。myFunc(ar)
和myFunc(&ar[0])
都可以正常工作。你能发布准确的错误消息吗?它应该编译以只传递数组名。它应该编译,当我们知道错误是什么时它会有所帮助。数组自然衰减到指针,例如,当将它们作为参数传递给函数时。因此,您可以将int
数组传递给需要指向int
指针的函数。你需要详细说明你有什么问题,比如给我们一个演示你有什么问题,包括你的实际错误。例如,请参见一个函数获取指针,并传递一个数组。myFunc(ar)
和myFunc(&ar[0])
都可以正常工作。你能发布准确的错误消息吗?它应该编译为只传递数组名。吹毛求疵:数组的名称恰好是它的第一个元素的地址,可以衰减为指向它的元素类型的指针,但它不是指向第一个元素的指针。差异将起作用,例如对于sizeof()
、模板等。(即,int[5]
的typeid()
是int[5]
,而不是int*
)挑剔:数组的名称恰好是它的第一个元素的地址,可以衰减为指向它的元素类型的指针,但它不是指向第一个元素的指针。差异将起作用,例如对于sizeof()
、模板等。(即代码< > Type ID)/代码> <代码> int [5 ] < /COD> <代码> int [5 ] < /COD>,而不是<代码> int */COD> >实际上,您可能根本不应该在C++代码中使用C数组。实际上,你可能根本不应该在C++代码中使用C数组。DevSolar我的评论提到了最初的前导句“数组是指针”。您的示例代码在某种程度上混淆了数组可以分解为指针的事实(即,您也可以将ar
传递到myFunc()
)。整个memcpy()
的事情只是把水弄脏了。@DevSolar我的评论提到了最初的前导句“数组是指针”。你的示例代码有点混淆了这样一个事实:数组可以分解成指针(也就是说,你可以将ar
传递给myFunc()
)。整个memcpy()。