关于c++数组引入函数的一些疑问

img


有没有人可以解答一下,为什么这个冒泡函数输入的只有数组arr的指针(地址),却可以在下面if语句中不解引用直接比较数组元素大小,arr【】表示的不是一个地址吗??谢谢啦

arr确实是一个指针的地址,表示的是从这里开始就是存储arr数组的起始位置。
我们假设传入的arr=x,那么函数内部的arr[j]就表示直接访问arr地址+j偏移量的地址,也就是x+j位置的地址,这里存的就是数组对应j位置的数,当然可以直接比较了

数组名本身也是数组的首地址,函数参数也是数组的首地址,所以是可以传递并在函数内访问数组的

数组传入函数,就退化为指针,原因是c语言的指针和数组是一体的
作为变量,编译器可以知道数组长度
作为参数,因为不知道传什么,所以无法知道。
请注意这是编译器的魔法,也就是说遇到指针类型,它会被编译器直接替换为指针。但是并不影响求值