C语言,这三种类型都怎么解释

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 02:44:09
C语言,这三种类型都怎么解释

C语言,这三种类型都怎么解释
C语言,这三种类型都怎么解释
 

C语言,这三种类型都怎么解释
如何判断一个指针的类型,指针指向的类型,告诉你一个简单的方法,叫 “右左法则”,具体是这样的,从未知的标识符看起,先看它的右边,再看它的左边,然后退出括号(有的话),再看右边,再看左边,一直到结束就好了.
比如这个:int (*uuf)[3][4];
从uuf开始看,先看右边,没东西,再看左边,是个 '*',表示uuf是个指针,然后退出括号,看右边,是个[][],表明uuf指向的是个数组,再看左边,是个int ,表示数组里面的元素是int.整体来说,就是
uuf是一个指向一个具有3行4列元素类型为int型的数组的指针.
再给举个例子:(int (*)(int *,int))( *ptr)[3];
从ptr看,右边,没有,左边是个*,表示ptr是个指针,出括号,再看右边,[3]表示ptr指向的是数组,再看左边,表示数组里的元素是(int (*)(int *,int))这个类型,具体(int (*)(int *,int))这个类型是啥呢,实际就是返回值为int 类型的,具有int *,int两个参数类型的函数指针.可以通过(int (*func)(int *,int))来判断出来func的类型.
下面这几个(1) char * fump();
(2)char (* fump)();
(3)char (* fump[3])();
通过右左法则,很容易看出来,(1)fump右边是括号,表明fump是个函数,左边的char *是他的返回值类型.(2)fump右边没有,左边是*,表明它是个指针,退出括号后,右边是(),表明指向的是一个函数,左边char,表明函数的返回值是char类型.(3)fump右边是个[3]表明fump是个数组,左边 *,表示数组元素是指针,退出括号,右边(),表明这个指针是指向函数的,即函数指针,左边char,表明这种函数的返回值是char.
对于指针的类型,也就是把这个未知的标识符去掉后,剩下的部分,就是指针的类型,就用上面的法则判断就ok.对于指针指向的类型,就是把未知的标识符以及前面的*号去掉后,剩下的部分.
关于typedef,这个只不过是个某个类型,取了个名字.名字就是那个未知的标识符.比如说:
typedef int (*FuncPtr)();这个的意思,就是把int (*)()这种类型起了个名字叫FuncPtr,以后再想定义这种类型的变量的时候,就直接用 FuncPtr var;这样 var就是一个int (*)()类型的指针了.
需要注意的是,typedef与简单的宏展开 是不同的.
比如:
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改.
#define 是要编译处理的,并不是简单的替换.
const PINT P 等效预 const int * p;