Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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++_Arrays_Function_Pointers_Initialization - Fatal编程技术网

C++ 初始化指针传递的数组

C++ 初始化指针传递的数组,c++,arrays,function,pointers,initialization,C++,Arrays,Function,Pointers,Initialization,函数无法初始化数组,因为sizeof()返回int指针的字节 不是myArray所指向的内存大小 void assignArray(int *myArray) { for(int k = 0; k < sizeof(myArray); ++k) { myArray[k] = k; } } void赋值数组(int*myArray) { 对于(int k=0;k

函数无法初始化数组,因为
sizeof()
返回
int指针的字节
不是
myArray
所指向的内存大小

 void assignArray(int *myArray)
 {
     for(int k = 0; k < sizeof(myArray); ++k)
     {
         myArray[k] = k;
     }
 }
void赋值数组(int*myArray)
{
对于(int k=0;k
还有其他问题吗


谢谢

不,没有其他问题。您所说的问题是阻止您初始化数组的唯一原因

通常,只需将大小与指针一起传递即可解决此问题:

void assignArray(int* myArray, std::size_t mySize)
{
    for (std::size_t k = 0; k < mySize; ++k)
        myArray[k] = k;
}
但是,这只适用于数组,而不适用于指向已分配数组的指针

int array1[1000];
int* array2 = new int[1000];
assignArray(array1); // works
assignArray(array2); // error

我看不出还有其他问题。但是,您可能想要这样:

template<int sz>
void assignArray(int (&myArray)[sz])
{
    for(int k = 0; k < sz; ++k)
    {
        myArray[k] = k;
    }
}
模板
void assignArray(int(&myArray)[sz])
{
对于(int k=0;k
当然,除非编译器在编译时都不知道它有多大。在这种情况下,必须显式传递一个大小

void assignArray(int* myArray, size_t sz)
{
    for(int k = 0; k < sz; ++k)
    {
        myArray[k] = k;
    }
}
void assignArray(int*myArray,size\u t sz)
{
对于(int k=0;k
如果您不知道尺寸,则存在设计错误


您应该能够区分两种类型的阵列。一个是这样的:

type name[count];
type *name;
void assignArray(int *myArray, int size)
{
    for(int k = 0; k < size; ++k)
    {
        myArray[k] = k;
    }
}
此数组的类型为
type[count]
,每个
count
的类型都不同。虽然它可以转换为
类型*
,但它是不同的。一个区别是
sizeof(name)
提供
count*sizeof(type)

另一种类型的数组如下所示:

type name[count];
type *name;
void assignArray(int *myArray, int size)
{
    for(int k = 0; k < size; ++k)
    {
        myArray[k] = k;
    }
}
它基本上只是一个指针,您可以使用数组初始化它,例如使用
malloc
new
。此变量的类型为
type*
,如您所见,类型中没有计数信息。因此,
sizeof(name)
为您提供计算机中指针的大小,例如4或8字节

你会问,为什么这两个
的大小不同?因为
sizeof
是在编译时计算的。考虑下面的代码:

int n;
cin >> n;
type *name = new type[n];
现在,当您说
sizeof(name)
时,编译器无法知道
n
的未来可能值。因此,它不能将
sizeof(name)
计算为数组的实际大小。此外,
name
指针甚至可能不指向数组

你问,你该怎么办?简单。将数组的大小保留在一个变量中,并将其拖动到获取数组的任何位置。所以在你的情况下是这样的:

type name[count];
type *name;
void assignArray(int *myArray, int size)
{
    for(int k = 0; k < size; ++k)
    {
        myArray[k] = k;
    }
}
void assignArray(int*myArray,int size)
{
对于(int k=0;k
你还期待什么吗?“除此之外,剧本《林肯夫人》怎么样?”最好先解决这个大问题,然后再考虑新的修复版本是否还有其他问题。这些评论对OP有任何帮助吗?他说了一个问题,相对来说(我理解他的意思),他显然没有;我不知道你们知道的那么多,但你们觉得可以开玩笑吗?!?真的很酷的家伙。但是如果OP分配arrayDarn,这是行不通的——比我快30秒@裁判官:我从上面的代码中推测他是这样做的。我贴出了答案的后半部分。