void func(int* array)
{
array=new int[5];
for (int i=5; i>0; i--)
array[5-i]=i;
}
int main()
{
int array[5]= {1,2,3,4,5};
func(array);
cout<<array[1]<<endl;
}
我认为这与数组是常量指针有关。 c ++如何精确地处理此代码,以及在函数内分配的动态内存会如何处理?
最佳答案
当您通过值将数组作为参数传递给函数时,它会衰减到指向第一个元素的指针,然后将其按值传递。因此,您在函数func
中收到的是数组第一个元素的地址的副本。在函数中,您只需更改地址,而不会更改main()
函数中的数组。对array
中的func()
所做的任何操作仅在该函数中是本地的。就像这样:
void f(int x)
{
x= 100; //modifying the copy, not the variable in main()
}
int main()
{
int value = 1000;
f(x); //pass by value, means pass a copy!
}
在这种情况下,您要在
x
中更改f()
的值。同样,在您的情况下,您要更改array
的值。由于array
是指针,因此您可以通过为其分配新的内存来使其指向其他位置。每次更改都针对该功能。还要注意,由于您为变量
array
分配了内存,并且没有取消分配内存,因此程序会泄漏内存。为了避免这种情况,您必须编写: delete [] array;
从函数返回之前。同样,此
delete
不会更改array
中的main()
。顺便说一句,如果要更改
main()
中数组的元素,则应改为:void func(int* array)
{
//array=new int[5]; //just comment this
for (int i=5; i>0; i--)
array[5-i]=i; //now array points to the same memory
//where main()'s array is in the memory.
}
希望能有所帮助。