码迷,mamicode.com
首页 > 其他好文 > 详细

C指针

时间:2015-05-07 23:36:15      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

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移到了数组的边界之外。小心!!

C指针

标签:

原文地址:http://www.cnblogs.com/doudingbest/p/4486182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!