typedef

来源:互联网 发布:it技术学院 编辑:程序博客网 时间:2024/06/12 00:10

        今天看这边《C 专家编程》 在其中看到了typedef 这个关键字, 其实以前我也知道他,都还在用。一直都是用在struct 的前面,只知道用他之后,struct 的变量可以直接声明, 而不需要加struct 。 只知其然,不知其所以然。今天看到这样2 句代码:

Code:
  1. typedef char * string;  

  2. string punchline = "I'm a frayed knot";  

         以为当时在教室,所以就记下来,也没太在意。就在刚才,无聊的我,就决定来试试!不试不知道,一式吓一跳。开始的时候怎么都不成功。因为我创建的CPP 文件。 所以,我就决定给他添加一个 #include <string> 来试试。 因为我写的代码是:

Code:
  1. typedef char * string;  
  2.   
  3. string s = "i am a student";  

          然后他就报错在第一句那个位置,后来我将其改成String  后,他又不错了, 只提示一个警告。不过已经能够编译运行了!

后来,我又将#include <string> 去掉,结果也能运行了,但是警告还在。我猜,估计又是编译器在抽风,后来我不管怎么去修改他都没问题了。只是警告依然: warning: deprecated conversion from string constant to 'char*' ;

           然后我就百度了,查处结果是char *背后的含义是:给我个字符串,我要修改它。

所以在其前面加一个 const 就OK

Code:
  1. typedef const char *Str;  

            因为这里的char * 的内容,我们是没办法更改的, 所以最合理的方式是对其加一个const ,意思是:给我个字符串,我只读他。

Code:
  1. #include <iostream>  
  2. // #include <string>  
  3. using namespace std;  
  4.   
  5. typedef const char *Str;  
  6.   
  7. int main()  
  8. {  
  9.     Str s = "i am a student";  
  10.     cout<<s<<endl;  
  11.     return 0;  
  12. }  

上面的代码是正确的,0 error, 0 warning


Code:
  1. #include <iostream>  
  2. // #include <string>  
  3. using namespace std;  
  4.   
  5. typedef char *Str;  
  6.   
  7. int main()  
  8. {  
  9.     Str s ;  
  10.     cin>>s;  
  11.     cout<<s<<endl;  
  12.     return 0;  
  13. }  

上面的代码是错误的,因为Str 只是 char * 的替代品。就类似于一个人的绰号。所以他的实际意义还是跟char * 是一个意思。所以,在使用他的时候,如果是数组必须先进行动态分配空间! 

原创粉丝点击