typedef和define的一些區別,typedefdefine

來源:互聯網
上載者:User

typedef和define的一些區別,typedefdefine

#include <stdio.h>#define PINT int*typedef int* pint;/*以下實驗說明了:(1)typedef int* pint;    const pint p1=&i1      的效果是和下面的一樣的    int* const p1;    這裡的const鎖住的是(p1),所以p1=&i2都是錯的,因為這裡記憶體位址p1已經被const鎖住,而*p1=其他值是可以的(2)#define  PINT int*    const PINT p2=&i1    的效果是和下面的一樣的    const int *p2;    這裡const 鎖住的是(*p2);所以*p2賦予其他值是錯誤的,因為這裡值已經被鎖住,而記憶體位址p2是可以賦予其他地址的。(3)pint a,b的效果和int* a;int* b;相同    PINT a,b的效果和int* a;int b相同(4)typedef int* pint;    pint const  p1=&i1;    的效果和(1)是一樣的;(5)#define  PINT int*    PINT const p2=&i1;    的效果與(2)剛好相反,也與(1)相同。    總結:由此可見,    (1)defined是宏替換,所以替換在編譯之前,如const PINT p2=&i1,PINT const p2=&i1;進行了替換後在編譯的話,編譯的時候就會讓編譯器直接    看到const int *p2以及int* const p2;    (2)而關鍵字typedef有種助記符的趕腳,所以在編譯的時候反應比const慢,所以放在哪裡都是先識別const先,變成int* const p1。    (3)嘻嘻,其他差異也可以看看說明的(3)*/void main(){    int i1=30;    int i2=40;    //const int *p=&i1;    const int *p;    p=&i1;    p=&i2;  //此處,p可以在任何時候重新賦值一個新的記憶體位址。    i2=80;  //這裡能用*p=80來代替嗎?答案是不能    //*p=30;    i1=35;    //const pint p1=&i1;    pint const p1=&i1;    //const PINT p2=&i1;    //PINT const p2=&i1;    //int* const p3=&i1;    //i1=40;    //p2=&i2;    //*p1=50;    //*p2=89;    //p1=&i2;    //*p3=    //i2=90;//    printf("%d",*p2);  //輸出80}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.