c和指针读书笔记——指针

1、指针

指针本身存储变量的地址,当*与之配合使用时,*与指针的整体可以代表变量本身。

  1: int a = 0;
  2: int *b = &a;
  3: (*b) = 2; //相当于 a = 2;

那么在声明时特别注意

  1: //*与指针结合代表一个变量(形如*pointer )
  2: int* a,b,c;     //第一段声明,此处不是声明了三个指针
  3: int  b,c,*a;    //实际等价于此行
  4: 
  5: //特别地,如果进行了typedef定义如下:
  6: typedef char * StringPointer
  7: //在声明变量时可能这个问题会非常隐蔽
  8: StringPointer a,b,c;  //b ,c 是char型
  9: 
 10: //所以建议每行只声明一个变量,并初始化。如:
 11: StringPointer a = NULL;
 12: //在声明指针的时候*与指针名字放在一起,如
 13: int *a,b,c;
 14: //这样就不会误认为三个都是指针了。

函数指针

这种指针指向函数,可以用来在函数中动态调用其他的函数。代码如下

  1: void ABC(int);
  2: int main(int argc,char *argv[]){
  3: 	void (*abc)(int);
  4: 	abc=ABC;
  5: 	(*abc)(1);             //此处就是调用ABC()
  6: }
  7: void ABC(int a)
  8: {
  9: 	a = 10;
 10: }

c支持强制转换,那么对于一个变量的值强制转换为函数指针时(void (*)(int))a

取《c陷阱与缺陷》的一个例子:

  1: (*(void(*)())0)()

以上代码即为调用地址为0处的函数(此函数无参数)。

posted @ 2011-12-02 20:45  martin@dlut  阅读(462)  评论(0编辑  收藏  举报