在函数中指针之间的相等性时,能否告诉我有什么问题?让我们看看这个例子:
void fun(int *array1)
{
int array2[5];
for(int i=0;i<5;i++)
{
array2[i]=3;
}
array1=array2;
}
int main(){
int x[5]; int n=5;
for(int i=0;i<5;i++){
x[i]=i; // --------> x[i]=i;
}
fun(x); //--------> x[i]=3
for(int i=0;i<5;i++){
cout<< x[i]<<" "; //-------> x[i]=i?????????? I expected x[i]=3;
}
return 0;
}
答案 0 :(得分:3)
void fun(int *array1)
{
int array2[5];
for(int i=0;i<5;i++)
{
array2[i]=3;
}
array1=array2; // **HERE**
}
当此函数返回时,array2
不再存在。因此,即使这确实将array1
的值返回给调用者,调用者也只会指向一个不再存在的数组。
当然,它甚至没有这样做。 array1=array2;
将array1
变量设置为指向array2
。但它们都是局部变量,所以这对调用者没有任何影响。
也许你想要:
memcpy(array1, array2, sizeof(array2));
但这是C ++,你应该使用像std::array这样的合理容器。
答案 1 :(得分:2)
你在我认为你打算做的有趣功能中使用int [5]创建一个新数组:
/**
* not every array is 5 items long, thus it is unsafe
*/
void fun(int *array1)
{
int* array2 = array1;
for(int i=0;i<5;i++)
{
array2[i]=3;
}
}
now int * array2指向您在main函数中调用的数组