1. 数组跟指针的差别呢? 对于一个数组,我们只能做两件事情, 就是确定数组长度和获得指向该数组第一个元素的指针。 其他的行为,都是通过指针方式来进行的。
如: int arr【4】;
Int * ip;
arr是指向数组首地址的指针, 所有 可以有 ip = arr。 并且arr 是一个指针常量。 所以你不能给arr赋值。 *(a +1)是取数组下标为1 的值,同样地 *(a + i) 是数组下标为 I 的引用。这种写法如此常用因此被简记为a[i] , 略带一句,由于 a + i 等于 I +a , 所有 arr [i] 又可以写成 i[arr], 但是这种写法是绝对不推荐的。
2. 前面写到, ip = arr; 如果ip 所指的地址是 0x1024 , 那 ip+1 是多少呢。
编译器会记录数组中元素的类型, 如果ip 指向 类型为 int 的数组, 则ip + 1 编译器会自动解释为 ip +1*(sizeof (int)) 正是这种机制,才保证无论数组中的元素是何种类型, 指针 加加 都保证指向数组中的下一个元素。
关于, 字符串 的理解是匿名数组。
3. 如果我们一数组名,作为函数参数传递,那么数组名会立刻转换为数组首地址的指针。
4.关于数组长度, int arr[10],
For(i=0;i<10; i++)
的解释: 为何不是For(i=0;i<=9; i++)
整数 x, 满足, x> = 10 . 且x< = 21 满足x的整数有多少个呢。 如果是 x>=10 且 x< = 11,我们知道满足条件的整数有两个就是10 和 11, 所以有 11 – 10 + 1 ,怎么解决这种统一的边界问题呢?就是“不对称边界”方法。 “x> = 10 . 且x< = 21” 可以写成 “x> = 10 . 且x< 22”只需要 22 – 10 !!