深入浅出C/C++变量声明

 

     C/C++语言中的变量看似简单,实则蕴藉丰富。如果我们能够深入理解这个要点,那么,许多初学者易混淆的几个概念就很容易推导出其真正语意,比如,指向常量对象的指针和常量指针(指向const对象的指针和const指针),数组指针和指针数组以及函数指针,这些定义就会变得很容易理解和区分。

  在C/C++语言中,变量的声明一般分为两部分,类型和一组类似于表达式的声明符,声明符和表达式很相似,对它求值应该返回一个前面指定类型的结果。这句话不好理解,但是很重要,我们用简单的例子来说明。

1float f, g; //对f和g求值时返回float类型,即f和g是float类型的变量
2int ff();//()是函数调用,对ff()其求值返回int类型,即ff是函数,返回值类型是int
3int *pn;//*为取值运算符,*pn是一个整型数,也就是说pn是一个整型指针

一切看起来很简单,那么我们接下来看看函数指针:

1int (*pf)();//我们对(*pf)()进行求值,对*pf进行函数调用(()运算符),返回值为int,所以,pf首先是一个指针,其次,其指向的是一个返回值类型为int的函数

现在看来,函数指针还是很好理解的。那么,我们来看看这个下面这个式子是什么意思呢?

1(*(void(*)()0)();//

如果你理解了前面关于变量声明的描述,这个式子应该很简单了。
这里再次强调,上面那段黑体字真的很重要,后面会有文章试着用它来分析,以区分数组指针和指针数组,指向常量对象的指针和常量指针(指向const对象的指针和const指针)。

本文为刊行二十年而不衰的神作《C陷阱与缺陷》的一篇读书笔记,感兴趣的朋友话可以参阅原文。

原文地址

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值