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秒@裁判官:我从上面的代码中推测他是这样做的。我贴出了答案的后半部分。