什么是C语言

C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I系統的發展,而 UNIX作?I系統(是一??多人多工的作?I系統)與大部份的公用程式及C本身的?譯器( Compiler)絕大部份是由C設?出?淼?且C的可?y性(Portability)?O佳,如果?跨平 台?绦?只需修改部份程式碼(甚至不需修改)即可?绦??镀??大的程式能力,相信C語 言是值得?W?的

c语言typedef

typedef的用在旧的C代码中帮助struct如何使用?

用在旧的C代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:

struct tagPOINT1

int x;

int y;

struct tagPOINT1 p1;

求助 C语言typedef的用法!请高手详细解答!!谢谢!!

举几个例子吧。

typedef int p; //将p定义为int类型,定义"p i;" = “int i;”

typedef int p[10]; //将p定义为int[10]类型,定义"p i;" = “int i[10];”

typedef int* p; //将p定义为int类型,定义"p i;" = “int *i;”

typedef struct stu p; //将p定义为结构体stu类型,定义"p i;" = “struct stu i;”

typedef int p(int , int); //将p定义为int __(int ,int)类型的函数,定义"p i;" = “int i(int, int);”首先你得明白变量定义,比如像

int n;

这样的“类型 变量;”样子,或者像

int (*fun)();

这样的函数指针定义

所有这些变量定义,在前边加上typedef就使得本来是变量的东西变成了一种类型,举个例子

小汽车 a1;//我们定义了a1是一个小汽车实体,看得见摸得着

typedef 小汽车 a2;//a2是一个概念,看不见摸不着,代表了小汽车一类,也就是上面的a1所属类型,你可以用它来定义其他实体的类型,使得其他实体有和a1一样的属性

也许这样并看不出好处在哪,试想当你需要明确一些类型的组合或者类型描述起来很复杂,就很有用了,比如下面的定义

德国产的黑色的敞篷的2010年出产的跑车 a3;

是不是每次都这么说起来很麻烦?选择typedef可以更方便。

另外如果你不用typedef却又定义了很多这样的变量,当你想更新这个类型,比如改为2020年出产的,就必须一个一个更改,是不是更崩溃。typedef用法小结

在C语言的情况下,与C++稍有出入。这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等地方都大量的用到.但是有些地方还不是很清楚,今天下午,就想好好研究一下.上网搜了一下,有不少资料.归纳一下:来源一:Using typedef to Curb Miscreant CodeTypedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?使用 typedef 为现有类型创建同义字。定义易于记忆的类型名typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如:typedef int size;此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size:void measure(size * psz);size array[4];size len = file.getlength();std::vector vs;typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组:char line[81];char text[81];定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:typedef char Line[81];Line text, secondline;getline(text);同样,可以象下面这样隐藏指针语法:typedef char * pstr;int mystrcmp(pstr, pstr);这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp():int mystrcmp(const pstr, const pstr);这是错误的,按照顺序,‘const pstr'被解释为‘char * const'(一个指向 char 的常量指针),而不是‘const char *'(指向常量 char 的指针)。这个问题很容易解决:typedef const char * cpstr;int mystrcmp(cpstr, cpstr); // 现在是正确的记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。链表中的大概应用name 保存在结构体单元的name[20] 数组里; typedef struct node{char name[20];struct node *link;}stud; 这是前面定义的结构体变量,一个单元包含两个部分,一个用来存储name的数组name[20],一个用来存放下一个单元地址的指向结构体node的指针。假设该单元的地址是p,那么p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一个单元的地址。

c语言typedef

在C语言中typedef是什么意思?干什么用的?

typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:

1、定义一种类型名

常规的应用中,想要定义两个字符指针,写下如下代码: char *a, b

(1)char* a,b;

(2)char c='m';

(3)a=&c;

(4)b=&c;

上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。

以下则可行:

(1)typedef char* PCHAR;

(2)PCHAR pa, pb;  

2、用于struct结构体

(1)#include

(2)struct tagPOINT1

(3) {

(4)int x;

(5)int y;

(6)};

(7)int main()

(9)tagPOINT1 p1,p2;//此句编译无法通过

(10)//错误信息:error: unknown type name 'tagPOINT1'

(11) //环境:Gcc 4.8.1

(12)}

必须采用如下定义;

(1)struct tagPOINT1 p1,p2;//必须有关键字 struct

(2)采用typedef,则可以省掉结构体定义时的struct

(3)ypedef struct tagPOINT

(5)int x;

(6)int y;

(7)}POINT;

(8)POINT p1; // 这样就比原来的方式少写了一个struct。

3、跨平台移植

程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。 

考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:

(1)typedef float REAL;

(2)typedef short int INT16;

(3)typedef int INT32

(4)...

这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。

4、为复杂的声明取别名

复杂的声明形如:void (*b[10]) (void (*)());

意思:首先*b[10]为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针。

这种复杂的声明,可以用typedef进行简化: 

首先:声明后面的函数指针:

(1)typedef void (pFunParam *)();

接着声明前面的指针数组:

(1)typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

本文档在撰写过程中,参考了网络博客typedef用法

里面提到一个复杂的声明:

(1)doube(*)() (*e)[9];

而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:

(1)double (*(*e)[9])();

e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。

这样的话,应该采用这样的typedef来简化声明:

typedef (*(*ptr)[9])();

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

参考资料来源:搜狗百科-typedef声明新的类型名来代替原有的类型名

比如,typedef intINTERGER;或typedef float REAL;

相当于用INTERGER来代表int类型,用REAL来代表float

习惯上把用typedef声明的类型用大写字母表示自定义数据类型

经常用来将结构定义成一个数据类型~如:

typedef struct student{

char name[10];

char kemu[10];

double mark;

}student;

这样就可以直接定义数据

student stu;

stu.name = '张三';

stu.kemu = '语文';

stu.mark = 97.5;自定义变量类型;

typedef 声明,简称 typedef,

功能:为现有类型创建一个新的名字。

比如:程序编写者常常使用 typedef 来编写更美观和可读的代码。

所谓美观:typedef 能隐藏笨拙的语法构造、平台相关的数据类型,

从而增强可移植性和程序的可维护性。

编程中:使用typedef一般有两个目的,

①给变量一个易记且意义明确的新名字,

②简化一些比较复杂的类型声明。

如果要仔细的了解typedef请见

是结构体的关键字,用来声明结构体变量如 struct student { char num[10]; char name[20]; int age; }; typedef是用来定义新的类型名来代替已有的类型名, 可将上面的结构体定义为 typedef struct student { char num[10]; char name[20]; int age; }stud; 也就是说,将原来的struct student 重新定义为 stud; 举个例子 如上面的方法定义了结构体student时,如果在主函数中声明结构体变量时,应按如下方法 struct student stu[10];这样就声明了一个结构体数组, 如果开始定义时用typedef,那么就可以直接用 stud stu[10]来声明, 这就他们的区别定义一种新的数据类型,这种类型又可以用来声明属于该类型的变量,大多数情况typedef用来定义一种结构体,因为原有数据类型不够用了。