马努力 2022-09-15 23:08 采纳率: 100%
浏览 26
已结题

数组传到函数首元素变化


void bb(int sz,int arr[])
{
    
    int i = 0;
    for (i=0;i<=sz-1;i++)
    {
        int j;
        for (j = 0; j <= sz - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int a = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = a;
            }
        }
    }
}
int main()
{
    int arr[] = {9,8,7,6,5,4,3,2,1,0};
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i;
    bb(sz,arr);
    for (i = 0; i <= sz; i++);
    {
        printf("%d ", &arr[i]);
    }
    return 0;
}

img


为什么arr[]传到函数里面首元素发生变化了,求解答

  • 写回答

2条回答 默认 最新

  • 日向晚,声声慢 2022-09-15 23:25
    关注

    首先你需要了解数组名是什么。数组名是首元素的地址(存在两个例外)https://blog.csdn.net/m0_64212811/article/details/126200617 你可以下看这篇博客,进一步理解。
    知道了数组名是首元素的地址,那么在传参的时候,本质上是传了一个地址。
    用指针去接收是没错的,但为什么又可以用数组形式接收呢?你可以这样去理解:我传了一个数组,用一个数组去接收,这样的逻辑没毛病,也没错误。
    但你要知道本质,它其实是个地址,那这时候,就不会在关注你数组的大小,你[]中的数字就可以省略,随便写一个数也没有关系。
    数组和指针访问方式是打通的,我不在赘述了,都在那个链接中自己看吧

    首元素没有发生变化,你那arr是首元素的地址

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 已采纳回答 9月16日
  • 创建了问题 9月15日