详解C语言中#define与typedef的互换细节

作者:kgmucom   在线用户:19
风之恋奇迹私服技术网是一家提供最新互联网编程技术网站

C/C++语言是语言编译过程的一部分,define通常是用于数据类型,而typedef通常是用于标识符,接下来爱站技术频道小编将为大家详解中#define与typedef的互换细节,一起来了解一下吧!

 

#include <stdio.h>
/*<---------           #define    string    char *            ---->*/
typedef   char *   string;      

 

int main(void)
{
   string   a[] = {"I", "like", "to", "fight,"},
   b[] = {"pinch,", "and", "bight."};
   printf("%s %s %s %s %s %s %s\n", a[0], a[1], a[2], a[3], b[0], b[1], b[2]);
   return 0;
}


用#define替换掉typedef的行,并且,已经给出的#define示例不能通过,但是,程序中只要添加一个字符,就可以了.

 

====================这个问题的解答===========================

有下面两种定义pStr数据类型的方法,两者有什么不同?哪一种更好一点?
typedef char* pStr;
#define pStr char*;


答案与分析:

通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子:
typedef char* pStr1;
#define pStr2 char *
pStr1 s1, s2;
pStr2 s3, s4;

在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
上例中define语句必须写成 pStr2 s3, *s4; 这这样才能正常执行。

所以程序

 

#define    string    char *;       
int main(void)
{
   string   a[] = {"I", "like", "to", "fight,"},
   *b[] = {"pinch,", "and", "bight."};   /*<--就是这里!!--*/
   printf("%s %s %s %s %s %s %s\n", a[0], a[1], a[2], a[3], b[0], b[1], b[2]);

 

   return 0;
}

以上就是详解C语言中#define与typedef的互换细节,都了解了吗?如果你还是有不清楚的地方,你可以随时来关注爱站技术频道的最新消息。

提供最全面的奇迹sf开服版本和最新的奇迹私服开服技术信息,奇迹私服文库让每一位奇迹私服玩家找到自己需要的版本技术文章

上一篇:c++中cin/cout与scanf/printf的区别比较

下一篇:深入了解c++中临时对象的析构时机

请发表您的评论