C语言复杂指针理解

学习和使用C语言近十年了但对C语言的复杂指针依然有些迷糊索性花点时间分析一下,下面是一些心得,希望对读者有所帮助


取The C Programming Language中的两个例子以分析

char (*(*x())[])();

char (*(*x[3])())[5];


若直接让我们说出这两个x分别是什么意思往往会有一些困难, 这里我们可以使用代入法(暂且叫代入法)来分析


分析结果转述原则:

左端=右端(比如下面的Y=*x()中Y为左端, *x()为右端)

若右端为数组则左端可被看作右端的其中一个元素

若右端为函数则左端可被看作右端函数的返回值

直到无嵌套为止


分析步骤:

1.取最内的元素组合作欲被代入项( 如下面的*x() )

2.对欲被代入项做分析解释( 如对*x()进行解释:x是一个返回一个指针的函数 )

3.生成新的分析语句 ( 如 char (*(Y)[])(); )

4.精简新生成的分析语句( 如char (*(Y)[])();为char (*Y[])(); )

5.递归进行如上操作直到分析语句中无嵌套存在为止

6.根据分析转述原则转述出结果


示例分析如下:

char (*(*x())[])();

令Y=*x()

x为一函数此函数返回一个指针

有如下:

char (*(Y)[])();

即char (*Y[])();

其中*Y[]为一指针数组 其中每一项为一指针

令Z = *Y[]

则有:char (Z)();

即 char Z()

其中Z为一个函数该函数返回一个字符

根据转述原则得结果如下:

x是一函数,该函数返回一个指针,该指针指向一个指针数组,该数组的每一项为一指针,这些指针中每一个指向一个函数,这些被指向的函数返回一个字符

修饰如下:

x是一个函数,该函数返回一个指针数组,其中每一项指向了一个函数,被指向的函数返回一个字符



第二个:

char (*(*x[3])())[5];

*x[3]   x为一个指针数组其中每一项为一指针

令Y = *x[3];

得:char (*(Y)())[5];

即:char (*Y())[5];

*Y() Y为一函数该函数返回一个指针

令: Z = *Y()

得:char Z[5];

Z是一个含5个字符的字符数组

根据转述原则得出结果如下:

x是一个指针数组其中每一项为一个指针, 这些指针中每项指向一个函数, 被指向的函数返回一个指针, 被返回的指针指向一个含有5个字符的字符数组

修饰如下:

x是一个指针数组, 其中的每一元素指向一个返回一个包含5个字符的字符数组的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值