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处的函数(此函数无参数)。

转载于:https://www.cnblogs.com/martin-dlut/archive/2011/12/02/2272669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值