天天看點

《C語言筆記:typedef關鍵字的用法》

一,typedef關鍵字

  1,C語言中的類型一共有兩種:一種是編譯器定義的原生類型(基礎資料類型,比如int char float double);第二種是使用者自定義的類型,不是語言自帶的而是程式員自己定義的(比如數組指針、指針數組、函數指針、結構體類型、函數類型等)。

  2,有時候自定義類型太長了,用起來不友善,所有用typedef給它重命名一個短點的名字。

  3,需要注意的是,typedef是給類型重命名,也就是typedef加工出來的是資料類型,而不是變量(不會配置設定記憶體)。類型是一個資料模闆,變量是一個實在的資料。類型是不占記憶體的,而變量是要占記憶體的。

二,typedef與#define的差別

  typedef char * TYPcahr;

  #define DEPchar  char * 

#include<stdio.h>

typedef char * TYchar;
#define DEchar  char *

int main(void)
{
    TYchar p1,p2;   //相當于 char *p1;char *p2

    DEchar p3,p4;   //相當于 char *p3,p4;    char *p3;char p4

    char c = 0;

    p1 = &c;
    p2 = &c;

    p3 = &c;
    p4 = &c;     //類型不比對
    p4 = c;
    
}           

三,typedef和結構體

  1,結構體在使用時都是先定義結構體類型,再用結構體類型去定義變量。

  2,C語言文法規定,結構體類型使用時必須是struct+結構體類型名+結構體變量名;這樣的方式來定義變量。

  3,使用typedef一次定義兩個類型,分别是結構體變量類型,和結構體變量指針類型。

四,tpyedef和const

  typedef int *PINT;

  1,const PINT p2;  實際的意思并不是 const int *p2,而是int *const p2;

  2,PINT const p2;相當于 int *const p2;

  3,要想定義 const int *p2; 隻能typedef const int * CPINT;    CPINT  p2;

五,typedef和函數指針

  比如 char *strcpy(char *dest,const char *src)的函數指針。

  typedef char *( *Pstrcpy)(char *,const char *);

  Pstrcpy p1;   //p1是一個指向strcpy函數類型的指針

  Pstrcpy p2;  //p2是一個指向strcpy函數類型的指針

#include<stdio.h>
#include<string.h>

typedef char *(*Pstrcpy)(char *,const char *);


int main(void)
{
    char a[32] = {0};
    char b[32] = {0};
    Pstrcpy p1,p2;
    p1 = strcpy;
    p2 = strcpy;

    p1(a,"hello world");
    p2(b,"hello world");
    printf("  a = %s  \n",a);  //hello world
    printf("  b = %s  \n",b);  //hello world
}           

繼續閱讀