Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ 在c+中传递数组+;功能_C++_Arrays_Function_Pointers - Fatal编程技术网

C++ 在c+中传递数组+;功能

C++ 在c+中传递数组+;功能,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,我想问一个问题:我想写一个可以传递数组的函数,然后该函数可以从用户那里读取值并填充数组 但事实上,在每一个新问题中,我都有不同类型的数组。有时是int,有时也可能是长的无符号 所以我写了这样的代码: #include <iostream> #define MY_TYPE long long using namespace std; void f(MY_TYPE a[ ], MY_TYPE min, MY_TYPE max) { MY_TYPE i; for(i

我想问一个问题:我想写一个可以传递数组的函数,然后该函数可以从用户那里读取值并填充数组

但事实上,在每一个新问题中,我都有不同类型的数组。有时是int,有时也可能是长的无符号

所以我写了这样的代码:

#include <iostream> 
#define MY_TYPE long long
using namespace std;

void f(MY_TYPE a[ ], MY_TYPE min, MY_TYPE max)
{
    MY_TYPE i;

    for(i = min; i < max; i++)
       cin>>a[i];
}

int main()
{
int x [5], i;
f ( (MY_TYPE*) x,(MY_TYPE) 0,(MY_TYPE) 5);
for(i=0;i<5;i++) cout<< x[i];
}
#包括
#定义我的_类型long long
使用名称空间std;
无效f(我的类型a[],我的类型最小值,我的类型最大值)
{
我的i型;
对于(i=min;i>a[i];
}
int main()
{
int x[5],i;
f((我的类型*)x,(我的类型)0,(我的类型)5);

对于(i=0;i),因为使用C++,而不是C,所以应该使用C++容器。
#include <array>

void f(std::array<int, 5>& a, size_t start, size_t end)
{
    for (auto i = min; i < max; ++i)
    {
        cin >> a[i];
    }
}
现在您可以执行以下操作:

int main()
{
    std::array<int, 5> integers;
    std::array<float, 10> floats;

    f(integers, 0, integers.size())
    f(floats, 0, floats.size())
}
intmain()
{
std::数组整数;
std::数组浮动;
f(整数,0,integers.size())
f(floats,0,floats.size())
}

定义一个
int
数组

int x [5], i;
MY_TYPE x[5], i;
f ( x, (MY_TYPE) 0, (MY_TYPE) 5);
然后继续使用它,就像它是
MY\u TYPE
的数组一样:

f ( (MY_TYPE*) x,(MY_TYPE) 0,(MY_TYPE) 5);
由于代码中的
sizeof(int)
小于
sizeof(MY_TYPE)
,这将导致访问内存超出有效限制,从而导致未定义的行为。在您的情况下,UB显示为运行时错误

使用
MY_TYPE
数组,而不是
int
数组

int x [5], i;
MY_TYPE x[5], i;
f ( x, (MY_TYPE) 0, (MY_TYPE) 5);
如果您知道如何使用函数模板,则可以使用函数模板

template <typename T>
void f(T a[], size_t min, size_t max) // Type of min and max should not
{                                     // depend on T
    size_t i;
    for(i=min;i<max;i++)
       cin>>a[i];
}

int main()
{
   int x [5], i;
   f (x, 0, 5);
   for(i=0;i<5;i++) cout<< x[i];
}
模板
void f(ta[],size\T min,size\T max)//最小值和最大值的类型不应为
{//依赖于T
尺寸i;
对于(i=min;i>a[i];
}
int main()
{
int x[5],i;
f(x,0,5);

for(i=0;i
x
被定义为一个由5个
int
s组成的数组。当你调用
f
时,你将
x
投射到一个
MY_类型*
上。如果
sizeof(int)!=sizeof(long-long)
然后,当您在
f
中遍历数组时,您要么将对元素的内容进行切片,要么从数组的末尾走出来。如果您将
x
更改为
MY\u TYPE x[5] >它按它的原理工作。

也许你应该学习C++模板。但是不太确定你在做什么。强制强制创建一个<代码> int x(5)。
long*
将给您留下未定义的行为。我非常感谢大家…感谢你们帮助您忘记
f
中数组的大小。另外,由于
std::array
存储了它的大小,您不需要将大小信息传递给它。@Jarod42不确定您的意思。大小只是没有检查(试图使其与OP的代码相似)@NathanOliver如果只想在数组的一个子集上运行
f
,那该怎么办?我们这里不是读心术的人,这是他以前拥有的,我只是尽量让它与OP的代码相似。非常感谢…现在我能理解发生了什么…非常感谢你的帮助我感谢你的帮助,谢谢你的帮助帽子…现在完成了