关于typedef与指针

2025-01-03 08:41:55
推荐回答(5个)
回答1:

可以象下面这样隐藏指针语法:   
typedef char * pstr;   
int mystrcmp(pstr, pstr);   
这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘ const char *'类型的参数。因此,它可能会误导人们象下面这样声明
mystrcmp():   
int mystrcmp(const pstr, const pstr);   
用GNU的gcc和g++编译器,是会出现警告的,按照顺序,‘const pstr'被解释为‘char* const‘(一个指向 char 的常量指针),而不是‘char *'(指向char 的指针)。这个问题很容易解决:   typedef const char* cpstr;   int mystrcmp(cpstr, cpstr); // 现在是正确的   记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身所指对象不会通过指针被修改。

回答2:

const (char*)
由于const char 和 char const 等价
同理可以推到
const (char*) 和 char* const 等价
所以标准应该改成支持类型加括号了。

回答3:

分开定义时 char const * p / const char * p 的const都是修饰*p的
char * const p的是修饰p的
用typedef吧char*定义到一起后, char 和* 连成整体, const就修饰不到指向的类型了,只能修饰到指针本身

回答4:

typeder 是枚举类型 关于这方面可以百度百科
讲讲你这里
typeder 紧跟一个数据类型 最后接一个你自己随便定义的量 就像 point (必须符合变量的名称法则)
然后point 就等价于 你要的那个数据类型 就像 char *;
最后你就可以拿来用了 比如 point p 就相当于 char * p;

回答5:

typedef(type define)相当于把point定义成char*类型,所以 const point p1 = string; 应该等效于const char* p1 = string。