//
// main.c
// typedef #include <stdio.h> /*
typedef可以给一个已知的数据类型起别名。
typedef 原有的数据类型 别名; 注意:
1. typedef不仅能给系统原有的数据类型起别名, 也可以给一个自定义的数据类型起别名
2. 利用typedef给数据类型起别名, 并不会生成一个新的数据类型, 仅仅是给原有的类型起了一个别名而已
*/ int sum(int v1, int v2)
{
return v1 + v2;
} int minus(int v1, int v2)
{
return v1 - v2;
} // 注意:如果是给指向函数的指针起别名,那么指向函数的指针的指针名称就是它的别名 // functionPotinter == int(*functionPotinter)(int , int)
typedef int(*functionPotinter)(int , int); int main(int argc, const char * argv[]) { // 9如何定义变量 : 数据类型 变量名称;
int (*sumP)(int , int ) = sum;
sumP = sum;
int (*minusP)(int, int) = minus;
minusP = minus; //---------------------------------------
functionPotinter sumP = sum;
printf("sum = %i\n", sumP( , )); functionPotinter minusP = minus;
printf("minus = %i\n", minusP(, ));
return ;
} // ----------------------------给指针起别名----------------------------
// String == char *
typedef char * String;
void test4()
{
// char *name = "lnj";,注意: 如果给指针起别名之后, 那么以后利用别名定义变量就不用再加*了
String name = "lnj";
printf("name = %s\n", name);
} // ----------------------------给枚举类型起别名---------------------------- // 1.先定义枚举类型, 再给枚举类型起别名
enum Gender //枚举类型的作用域:从定义枚举类型那行开始,到作用域结束。
{
kGenderMale,
kGenderFemale
};
typedef enum Gender SEX;
//enum Gender sex0;
//SEX sex1 = kGenderMale;
//SEX sex2 = kGenderFemale; // 2.定义枚举类型的同时给枚举类型起别名 typedef enum Gender
{
kGenderMale,
kGenderFemale
} SEX; // 3.定义枚举类型的同时给枚举类型起别名, 并且省略枚举原有类型名称
typedef enum
{
kGenderMale,
kGenderFemale
} SEX; void test3()
{ // 给枚举起别名
enum Gender sex0;
SEX sex1;
sex1 = kGenderMale;
/*
定义枚举变量有3种方式
1.先定义枚举类型, 再定义枚举变量
2.定义枚举类型的同时定义枚举变量
3.定义枚举类型的同时定义枚举变量, 并且省略枚举类型名称
*/ enum Gender2
{
kGenderMale2,
kGenderFemale2
} sex2;
sex2 = kGenderFemale2; enum
{
kGenderMale3,
kGenderFemale3
} sex3;
sex3 = kGenderFemale3; }
// ----------------------------给结构体类型起别名----------------------------
// 1.先定义结构体类型, 再给类型起别名
struct Person //结构体类型的作用域,从结构体类型定义的地方开始直到作用域结束。
{
int age;
double height;
char *name;
};
//struct Person sp1;
//struct Person sp2;
//struct Person sp3;
//struct Person sp4;
//struct Person sp5; typedef struct Person SPerson;
//SPerson sp1;
//SPerson sp2;
//SPerson sp3;
//SPerson sp4; // 2.定义结构体类型的同时, 给结构体类型起别名
typedef struct Person
{
int age;
double height;
char *name;
} SPerson;
//SPerson sp1;
//SPerson sp2;
//SPerson sp3;
//SPerson sp4; // 3.定义结构体类型的同时, 给结构体类型起别名, 并且省略掉原有类型的名称 typedef struct
{
int age;
double height;
char *name;
} SPerson;
//SPerson sp1;
//SPerson sp2;
//SPerson sp3;
//SPerson sp4; void test2()
{ // 给构造类型起别名
struct Person
{
int age;
double height;
char *name;
}; struct Person sp0;
SPerson sp;
SPerson sp1;
SPerson sp2;
SPerson sp3;
SPerson sp4;
/*
结构体变量的定义方式
1.先定义类型再定义变量
2.定义类型的同时定义变量
3.定义类型的同时定义变量, 并且省略类型名称
*/
} // ----------------------------给基本数据类型(int float doulbe char)起别名----------------------------
// Integer == int
typedef int Integer;
typedef Integer myInt; // 可以给自定义的起别名 void test1()
{
int num = ;
printf("num = %i\n", num); Integer age = ;
printf("age = %i\n", age); myInt score = ;
printf("score = %i\n", score);
}
//
// main.c
// typedef和宏定义的区别 #include <stdio.h> typedef int myInt;
#define Integer int //把Integer用int替换,#define是编译的时候替换, typedef char * String;
#define MY_STRING char * // 一般情况下如果要给数据类型起一个名称建议用typedef, 不要用define,
int main(int argc, const char * argv[]) { int num = ;
printf("num = %i\n", num); myInt age = ;
printf("age = %i\n", age); Integer score = ;
printf("score = %i\n", score); char *name = "lnj";
printf("name = %s\n", name); String name2 = "lmj";
printf("name2 = %s\n", name2); MY_STRING name3 = "lk";
printf("name3 = %s\n", name3); String name1, name2;
name1 = "lnj";
name2 = "lmj";
printf("name1 = %s, name2 = %s\n", name1, name2); //char *name3, name4; char *name3; char name4; 直接替换是会出问题的。
MY_STRING name3, name4;
name3 = "lk";
name4 = "xb";
printf("name3 = %s, name4 = %s\n", name3, name4);
return ;
}

c27---typedef的更多相关文章

  1. 19-typedef

    本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...

  2. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  3. typedef

    第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...

  4. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  5. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  6. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  7. C及C++中typedef的简单使用指南

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...

  8. [转]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  9. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  10. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

随机推荐

  1. WebApi里面路由机制的原理以及路由匹配的过程

    1.WebApi服务启动之后,会执行全局配置文件Global.asax.cs的 protected void Application_Start(){GlobalConfiguration.Confi ...

  2. Dotnet Core2.1 使用CodeFirst

    一.添加Mysql引用 二.添加连接字符串 三.配置startup.cs 三.初始化数据库 Add-Migration init Update-Database 四.数据迁移 user实体添加了pas ...

  3. SQLServer2008 关于CASE WHEN

    CASE WHEN的两种格式 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END 2.Case搜索函数 CASE ...

  4. github添加公钥出现 github ssh key Key is invalid. Ensure you've copied the file correctly的解决办法

    因为在公钥查看的时候可能是利用了vim明明查看,所以会有换行,导致这个错误,解决方法是用cat命令查看文件,或者其他方式查看,总之公钥不能有换行.

  5. OpenCV:OpenCV图像旋转的代码

    OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...

  6. HDU_1398_母函数

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. 【转载】JSP 中EL表达式用法详解

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  8. [USACO10DEC]宝箱Treasure Chest

    区间DP,但是卡空间. n2的就是f[i,j]=sum[i,j]-min(f[i+1][j],f[i][j-1])表示这个区间和减去对手取走的最多的. 但是空间是64MB,就很难受 发现一定是由大区间 ...

  9. 使用阿里云对象存储OSS上传图片工具类

    package com.verse.hades.utils; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.Cr ...

  10. jvm学习-ClassLoader(二)

    ClassLoader结构 jdk加载的4个步骤 CustomClassLoader 用户自定义的classLoader APPClassLoader主要加载classPath下面的class Ext ...