C 语言 typedef

虽然#define语句看起来象typedef,但实际上却有本质上的差别。对于#define来说,仅在编译前对源代码进行了字符串替换处理;而对于typedef来说,它建立了一个新的数据类型别名。由此可见,只是将pch1定义为指针变量,却并没有实现程序员的意图,而是将pch2定义成了char型变量。

在指针函数中,有这样一类函数,它们也返回指针,但是这个指针不是指向int、char之类的基本类型,而是指向函数。对于初学者,别说写出这样的函数声明,就是看到这样的写法也是一头雾水。比如,下面的语句:

int (*ff(int))(int *, int);

我们用上面介绍的方法分析一下,ff首先与后面的“()”结合,即:

int (*(ff(int)))(int *, int);                   // 用括号将ff(int)再括起来

也就意味着,ff是一个函数。

接着与前面的“*”结合,说明ff函数的返回值是一个指针。然后再与后面的“()”结合,也就是说,该指针指向的是一个函数。

这种写法确实让人非常难懂,以至于一些初学者产生误解,认为写出别人看不懂的代码才能显示自己水平高。而事实上恰好相反,能否写出通俗易懂的代码是衡量程序员是否优秀的标准。一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:

int (*PF)(int *, int);

也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:

typedef int (*PF)(int *, int);

这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:

PF ff(int);

时间: 2024-08-07 19:32:19

C 语言 typedef的相关文章

浅谈c语言typedef 与结构体指针(个人小经验)

 #include<stdio.h> #include<string.h> typedef struct emp{ char sex[8]; char name[15]; int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{ char sex[8]; char name[15]; int age; }pi,*emp;//为了程序的可读性最好不要这样声明*/ int m

C语言typedef详解

在C还是C++代码中,typedef都使用的很多.typedef与#define有些相似,其实是不同的. 基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括基本数据类型(int,char),也包括自定义的数据类型(struct). (1)与#define的区别 typedef有点像#define宏,其实际类型替代同义字.不同点是typedef在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换. (2)减少错误 定义一种类型的别名,而不只是简

C语言typedef的用法(转)

http://www.cnblogs.com/afarmer/archive/2011/05/05/2038201.html 一.基本概念剖析 int* (*a[5])(int, char*);       //#1 void (*b[10]) (void (*)()); //#2 double(*)() (*pa)[9];          //#3 1.C语言中函数声明和数组声明.函数声明一般是这样: int fun(int, double); 对应函数指针(pointer to funct

C语言 typedef和#define的用法与区别

typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点. 二.#define的用法 #define为一宏定义

20-C语言typedef

一.typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名). #include <stdio.h> typedef int Integer; typedef unsigned int UInterger; typedef float Float; int main(int argc, const char * argv[]) { Integer i = -10; UInterger ui = 11; Float f = 12.39f; printf(&

C语言 typedef用法

#include <stdio.h> #include<string.h> typedef int huang; //typedef定义一个数据类型,将huang 变为整型, int main() { huang a=57; //后期用 huang定义的都是整型 printf("%d\n",a); return 0; }

C语言 typedef struct

结构体typedef struct的用法 和结构体的定义 结构体的定义: 1. struct Person { char name[20]; char sex; float  height; int age; };   只有结构体的定义 2. struct Person { char name[20]; char sex; float  height; int age; } xiaohong;  附加该结构体类型的“结构体变量”的初始化定义结构体 这种定义就相当于 struct Person {

C语言typedef struct具体解释

在C中定义一个结构体要用typedef,如: typedef struct Student { int a; }Stu; 于是在声明变量的时候就能够:Stu stu1;(假设没有typedef就必须用struct Student stu1;来声明).这里的Stu实际上就是struct Student的别名:Stu == struct Student. 当然事实上这里能够不写Student,例如以下: typedef struct { int a; }Stu; 这里也就必须使用Stu stu1来声

C语言 运维之路

C语言 运维之路 1.C语言 介绍 2.C语言 HelloWorld 模板 3.C语言 gcc 编译程序 4.C语言 多文件编程 5.C语言 进制 6.C语言 数据存储方式 7.C语言 数据类型 8.C语言 有符号.无符号 9.C语言 汇编了解 10.C语言 字符串  11.C语言 strcpy  功能:把src所指向的字符串复制到dest所指向的空间中 12.C语言 strncpy   功能:把src指向字符串的前n个字符复制到dest所指向的空间中 13.C语言 strcat   功能:将s