zoukankan      html  css  js  c++  java
  • typedef 及其与struct的结合使用

     1 //相当于为现有类型创建一个别名,或称类型别名。
     2 //整形等
     3 typedef int size;
     4 
     5 
     6 //字符数组
     7 char line[81];
     8 char text[81];//=>
     9 
    10 typedef char Line[81];
    11 Line text, secondline;
    12 
    13 
    14 //指针
    15 typedef char * pstr;
    16 int mystrcmp(pstr p1, pstr p2);//注:不能写成int mystrcmp(const pstr p1, const pstr p3);因const pstr p1解释为char * const cp(不是简单的替代)
    17 
    18 
    19 //与结构类型组合使用
    20 typedef struct tagMyStruct
    21 {
    22 int iNum;
    23 long lLength;
    24 } MyStruct;//(此处MyStruct为结构类型别名)=>
    25 
    26 struct tagMyStruct
    27 {
    28 int iNum;
    29 long lLength;
    30 };//+
    31 typedef struct tagMyStruct MyStruct;
    32 
    33 
    34 //结构中包含指向自己的指针用法
    35 typedef struct tagNode
    36 {
    37 char *pItem;
    38 pNode pNext;
    39 } *pNode;//=>error
    40 //1)
    41 typedef struct tagNode
    42 {
    43 char *pItem;
    44 struct tagNode *pNext;
    45 } *pNode;
    46 //2)
    47 typedef struct tagNode *pNode;
    48 struct tagNode
    49 {
    50 char *pItem;
    51 pNode pNext;
    52 };
    53 //3)规范
    54 struct tagNode
    55 {
    56 char *pItem;
    57 struct tagNode *pNext;
    58 };
    59 typedef struct tagNode *pNode;
    60 
    61 
    62 //与define的区别
    63 //1)
    64 typedef char* pStr1;//重新创建名字
    65 #define pStr2 char *//简单文本替换
    66 pStr1 s1, s2;
    67 pStr2 s3, s4;=>pStr2 s3, *s4; 
    68 //2)define定义时若定义中有表达式,加括号;typedef则无需。
    69 #define f(x) x*x=>#define f(x) ((x)*(x))
    70 main( )
    71 {
    72 int a=6,b=2,c;
    73 c=f(a) / f(b);
    74 printf("%d \\n",c);
    75 }
    76 //3)typedef不是简单的文本替换
    77 typedef char * pStr;
    78 char string[4] = "abc";
    79 const char *p1 = string;
    80 const pStr p2 = string;=>error
    81 p1++;
    82 p2++;
    83 
    84 //1) #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
    85 //2) typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。

     1 //
     2 //C中定义结构类型
     3 typedef struct Student
     4 {
     5 int a;
     6 }Stu;//申明变量Stu stu1;或struct Student stu1;
     7 //
     8 typedef struct
     9 {
    10 int a;
    11 }Stu;//申明变量Stu stu1;
    12 
    13 //C++中定义结构类型
    14 struct Student
    15 {
    16 int a;
    17 };//申明变量Student stu2;
    18 
    19 
    20 //C++中使用区别
    21 struct Student 
    22 { 
    23 int a; 
    24 }stu1;//stu1是一个变量 。访问stu1.a
    25 
    26 typedef struct Student2 
    27 { 
    28 int a; 
    29 }stu2;//stu2是一个结构体类型 访问stu2 s2; s2.a=10;
    30 //还有待增加。
  • 相关阅读:
    Do You See Me? Ethical Considerations of the Homeless
    ELDER HOMELESSNESS WHY IS THIS AN ISSUE?
    Endoflife support is lacking for homeless people
    html内联框架
    html字体
    html块 div span
    html列表
    html表格
    SQL Server管理员专用连接的使用   作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情况
    如何配置最大工作线程数 (SQL Server Management Studio)
  • 原文地址:https://www.cnblogs.com/diligentcalf/p/3558768.html
Copyright © 2011-2022 走看看