c - 为什么数组指针打印不正确?

标签 c arrays pointers

我有一个函数(来自教程)

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/

相关文章:

c++ - 十六进制字符数组 2 x 2 个字符到 uint8_t

java - 如何在水平直方图上打印数字?

c - 反转几个文件的所有字符串

c - 在哈希表上插入

C:将数据值读入结构

javascript - 创建自动填充 JavaScript 数组

c - 为什么会出现段错误(核心已转储)?

c++ - C++中 "resizing"数组访问冲突

c++ - 指向const变量的指针具有不同的拷贝

c - 关于 free() 在 C 中如何工作的说明 -