Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将int[]传递给参数为int的函数*_C++_Pointers_Arguments - Fatal编程技术网

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()。