typedef char * pstr;
int mystrcmp(const pstr, const pstr);
我们希望表达的是
int mystrcmp( const char*, const char* )
2个指向常量 char的指针
可它被解释后的实际表达式变成了:int mystrcmp( char* const, char* const ) 2个指向char的常量指针
const修饰的是pstr,而pstr代表了char *不是char,也就是把指针转换为常量
修改后写成
typedef const char* cpstr;
int myctrcmp( cpstr, cpstr);
2.解释
typedef int* (* pt)(int* (*pn)(int * p1,int *p2),int * p3);
pt p;
确定被声明的类型:遇到typedef时,从左到右进行扫描,找到第一个“陌生”的标志符,这个标志符就应该是语句所声明的
类型名称。 例如上例中,第一个符合条件的是 pt.那么它就是掩饰的类型,其他的都是为了阅读方便的占位符,可有可无.
上面的例子等价于:typedef int* (* pt)(int* (*)(int *,int *),int *);
常量:
C语言里 3种定义常量的方法: #define, const,枚举。
只有枚举是真正的常量, 真正的常量必须是一个右值,只有这样才能保证它是不可修改的。
但是 const修饰的对象是一个 左值 ,尽管这个对象被限定,但是还是可以通过合法的手段
修改它。 因此const被 命名为 只读 更加合适
const int i=10;
int *p2=&i;
*p2 = 20; //修改了const的值
typedef static int FAST_COUNTER
编译错误。
分析:
typedef 跟 static ,auto, extern,register等一样是
存储类型关键字 。编译不通过是因为声明中存在了多
个存储类的关键字.