标签:
1.不能简单地通过检查一个值的位来判断它的类型,必须要观察程序中这个值的使用方式。
2.指针的初始化是用&操作符完成的,用于产生操作数的内存地址。指针一定要不初始化,不然不能进行解引用。
3.通过一个指针访问它所指向的地址的过程,用 *表示间接访问或者解引用指针。
4.NUll指针,作为一个特殊的指针变量。对一个null指针进行解引用是非法的,故需要提前判断是否是null指针!
5. 指针:int *b = &a; //b为指向整型的指针变量,b=&a ,b指向地址a;*b为地址a的内容。
6.指针的指针:int a=12; int *b=&a; int **c =&b; //操作符自右向左的结合
| 表达式 | 相当的表达式 | 
| a | 12 | 
| b | &a | 
| *b | a ,12 | 
| c | &b | 
| *c | b,&a | 
| **c | *b,a,12 | 
7.指针表达式
char ch=‘a‘;
char *cp = &ch;
| 表达式 | 值 | 
| *cp++ | 右值为*cp=‘a’,然后cp++(指针增加,指向下一个地址) | 
| (*cp)++ | 右值为*cp=‘a’,然后‘a’++=‘b’ | 
| *++cp | 右值为cp++后的值,即cp指针指向的地址的下一个地址的值 | 
| ++*++cp | 右值为cp指针指向的地址的下一个地址的值+1 | 
| ++*cp++ | 右值为=‘a’+1=‘b’,然后cp++(指针增加,指向下一个地址) | 
例子:计算字符串长度,查找一组字符串中的某个字符(用到**)。(判断是否是最后一个字符用‘\0’判断)
8.指针运算
算数运算 1. 指针 +/- 整数 (指针每增加1,指针所指向的地址增加1*指针所指向类型的大小。)
2. 指针 - 指针 (只有当两个指针都指向同一个数组中的元素时)
关系运算
(大于、小于,大于等于,小于等于) (前提是指向同一个数组中的元素)
注意:要回辨别指针是否越界,和指向为知值的指针
如下用于清除一个数组中的所有元素
#define N_VALUES 5 float values[N_VALUES]; float *vp; for(vp=&values[0];vp<&values[N_VALUES];){ *vp++=0; }
同上代码功能相同
#define N_VALUES 5 float values[N_VALUES]; float *vp; for(vp=&values[N_VALUES];vp>&values[0];){ *--vp=0; }
以下此种写法错误!!!
#define N_VALUES  5
  float values[N_VALUES];
  float  *vp;
  for(vp=&values[N_VALUES];vp>=&values[0];vp--){
              *vp=0;
}
//数组第一个元素被清除后,vp还会执行--操作,这就使vp移到了数组的边界之外。小心!!
标签:
原文地址:http://www.cnblogs.com/doudingbest/p/4486182.html