一、常量指针 让我们来分析一个表达式:假定变量a的存储位置为0x00000100,请看下面一条语句: *0x00000100 = 25; 它看上去是将变量a赋值25,但是实际上他是错误的,因为,间接访问操作只 能作用于指针类型的表达式,所以这个地方必须要有强制类型转换,即: *(int*)0x00000100 = 25;这样才是正确的。 这种方式在实际中并不是一定用不着,在嵌入式编程中,在需要从flash里读值或是写值的时候,就会用到! 二、如何识别 指针数组 还是 数组指针!!!(概念性问题) 例如 int * a[10] ; //可以讲这个声明堪称一个表达式,在这个表达式中,[ ] 优先级比*要高, 所以先执行下标引用,即a [ ]说明a是一个某种类型的数组,然后执行的是*操作, 即执行间接访问操作。之后这个表达式的操作符就全部看完了,所以它的结果是 一个int型,现在就很明确了,也就是例如 *(a[3]) = 整型, 所以这个a就是一个数组的首地址,而每个元素是一个int型指针。 int (*a) [10] ;利用上述方法很容就可以解答这个问题,它是一个指针,指向一个数组,这个数组有 10个元素,全是int型 三、指针的算术运算 1、指针 +- 整数 以 int *p; p+1为例来说,实际上就是一定指针,真正移动的单位距离,和指针的类型有关。 2、 |
|