我有一个函数(来自教程)
int* func(int *arr, int n){
if(n==1 || n==0)
return arr;
else{
int temp=arr[0];
arr[0]=arr[n-1];
arr[n-1]=temp;
return func(++arr,n-2);
}
}
我试运行它并发现它会反转数组,非常好。当我使用这段代码时,我得到了预期的结果
int x[]={1,2,3,4,5,6,7,8,9};
int i;
func(x,9);
for(i=0;i<9;i++)
{
printf("%d\n",x[i]);
}
但是在使用下面的代码时得到垃圾值
int x[]={1,2,3,4,5,6,7,8,9};
int* p;
p = func(x,9);
for(i=0;i<9;i++)
{
printf("%d\n",*(p+i));
}
弱指针请解释你的答案。
最佳答案
你的问题是递归,而不是指针。可视化递归调用,返回的指针指向第 5 个元素:
func([1, 2, 3, 4, 5, 6, 7, 8, 9], 9) ->
func([2, 3, 4, 5, 6, 7, 8, 1], 7) ->
func([3, 4, 5, 6, 7, 2, 1], 5) ->
func([4, 5, 6, 3, 2, 1], 3) ->
func([5, 4, 3, 2, 1], 1) ->
[5, 4, 3, 2, 1]
来自评论:
This might illustrate it better, I incremented the array before printing, so you can see what the array looks like in the recursive call: http://ideone.com/lzgEUX
关于c - 为什么数组指针打印不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643833/