arr[i]的本质是 *(arr + i)
只要这个数组存在,传入首地址,都可以访问后面的。
很明显不是啊,你没看计算长度是 sizeof(arr) / sizeof(arr[0])
传arr进去,是把数组首地址传进去,但计算的是整个数组所占内存空间的大小;
传arr[0],这是把数组第一个元素值传进去,也就是计算它对应int类型的所占内存空间。
最后两者相除就是数组长度
代码里第7行,得到的只是一个指针的大小值,不是数组的长度值,这行是错误的。
我们知道,数组是内存里一块连续的空间,当我们知道了数组的首地址即数组名,那么它是连续的空间分配,意味着它们的地址是连续的,就可以用 首地址 + 偏移量 得到数组里每个元素所在的地址值,也就可以访问任一元素,arr[i] 就是 *(arr + i),这是数组两种不同形式的写法,实际作用是一样的。