C 语言 指针和数组的几点笔记:

来源:互联网 发布:java正则匹配时间格式 编辑:程序博客网 时间:2024/05/01 22:18


 

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 !!