博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c27---typedef
阅读量:5347 次
发布时间:2019-06-15

本文共 4301 字,大约阅读时间需要 14 分钟。

////  main.c//  typedef#include 
/* 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(10 , 20)); functionPotinter minusP = minus; printf("minus = %i\n", minusP(20, 10)); return 0;}// ----------------------------给指针起别名----------------------------// 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 == inttypedef int Integer; typedef Integer myInt; // 可以给自定义的起别名void test1(){ int num = 10; printf("num = %i\n", num); Integer age = 30; printf("age = %i\n", age); myInt score = 99; printf("score = %i\n", score);}
////  main.c//  typedef和宏定义的区别#include 
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 = 10; printf("num = %i\n", num); myInt age = 30; printf("age = %i\n", age); Integer score = 99; 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 0;}

 

转载于:https://www.cnblogs.com/yaowen/p/7404262.html

你可能感兴趣的文章
【探路者】Alpha发布用户使用报告
查看>>
Go并发模式:管道与取消
查看>>
poj 3250 Bad Hair Day(单调队列)
查看>>
《Java程序设计》第2周学习总结
查看>>
1123 Is It a Complete AVL Tree(30 分)
查看>>
SEO优化---学会建立高转化率的网站关键词库
查看>>
正则表达式提取器(Regular Expression Extractor)-关联test plan中的sampler
查看>>
c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件
查看>>
好的网站-问卷星
查看>>
git commit -m 与 git commit -am的区别
查看>>
mysql 获得最新的数据并且去除重复
查看>>
OS X EI Capitan 10.11.1快速升级方法介绍
查看>>
BJQA-IIATF1.0框架之《自动生成有效请求Json串》
查看>>
yii自定义行为组件(简介版)
查看>>
字符串包含
查看>>
Code First :使用Entity. Framework编程(1) ----转发 收藏
查看>>
可以展开和收起的的LinearLayout
查看>>
字符编码
查看>>
SQL中文转拼音
查看>>
hashlib 和 hmac
查看>>