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