色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 理解C語言的聲明

理解C語言的聲明 時間:2018-09-28      來源:未知

1. 理解C語言的聲明

聲明主要由聲明器、類型說明符、類型限定符和存儲屬性組成

1.1. 聲明器(declarator)

1) 指針

                * const volatile

                * volatile

                *

                * const

                * volatile const

                指針的五種限定形式

2) 數組

                類型 標識符[下標]

3) 函數

                類型 標識符(參數列表)

1.2. 類型說明符

1) void char short int long signed unsigned float double

2) 結構體struct

3) 枚舉enum

4) 聯合體union

1.3. 類型限定符

1) const

2) volatile可以放在類型前面,也可以放在后面

1.4. 存儲屬性

1) static

2) extern

3) register

4) auto

5) typedef針對標識符(名稱)

1.5. 聲明的限制

1) 非法

            函數的返回值不能為函數

            函數的返回值不能為數組

            數組中不能有函數

            函數的參數不能為函數

2) 合法

            函數的返回值可以是函數指針

                void (*func(void))(int)

            函數的返回值可以是指向數組的指針

                int(*func(void))[10]

            數組中可以有函數指針

                void (*array[10])(int)

            函數的參數可以是函數指針

                void func(void (*)(int))

1.6. 聲明組成的優先級規則

1) 從名字開始

2) 優先級順序

            聲明中被括起來的部分

            后綴操作符

                括號()表示是一個函數

                方括號[ ]表示是一個數組

            前綴操作符

                星號 * 表示是”指向……的指針“

3) const或volatile關鍵字

            如果后面緊跟著類型說明符(如int,long等),則作用于類型說明符

            其他情況下,作用于左邊緊鄰的星號 *,表示指針常量(指針不可變)

4) 整體思路

            從里往外

            從右到左

            一找函數

            二找數組

            三找指針

 

2. 練習題

詳細解釋說明如下所列的聲明

char *ptr;

char const *ptr;

const char *ptr;

char * const ptr;

char * const *ptr;

 

int demo1(int);

int *demo2(int);

int (*demo2)(int);

int (*demo3(int))(void);

int (*(*demo4)(int))(void);

int (*(*demo5[10])(int))(void);

int (*(*(*demo6)[10])(int))(void);

int (*(*(*demo7)[10])(void (*cb)(int)))(void);

int (*(*(*const demo8)[10])(void (*cb)(int)))(void);

int * const * (*(*demo9)[10])(void (*cb)(int));

int * const * (*(*demo10)[10])(int (*(*cb)(int))[10]);

習題分步講解:

char  *ptr;

        ptr   //名稱是ptr

       * //ptr是一個指向...的指針

char        //char類型的數據

/*ptr是一個指向char類型數據的指針。*/

 

 

char const *ptr;

              ptr  //名稱是ptr 

             *      //ptr是一個指向...的指針

char const        //char類型的const常量

/*ptr是一個指向char類型const常量數據的指針。*/

 

const char *ptr;

              ptr //名稱是ptr 

             *      //ptr是一個指向...的指針

const char        //char類型的const常量

/*ptr是一個指向char類型const常量數據的指針。*/

 

char * const ptr;

               Ptr //名稱是ptr,ptr是一個...

      * const    //指向...的指針常量

char             //char類型數據

/*ptr是一個指向char類型數據的指針常量。*/

 

char * const *ptr;

                 ptr //名稱是ptr

                *     //ptr是指向...的指針

      * const        //指向...的指針常量

char                //char型數據

/*ptr是指向一個指向char型數據的指針常量 的指針。*/

 

 

int demo1(int);

     demo1         //名稱是demo1

int       (int);  //demo1是一個函數,參數是int,返回值int

/*demo1是一個帶有一個int型參數,返回值為int類型的函數。*/

 

int *demo2(int);

      demo2       //名稱是demo2

     *     (int); //demo2是一個函數,參數是int,返回一個指向...的指針int               //int類型數據

/*demo2是一個帶有一個int型參數,返回值為一個指向int類型數據的指針。*/

 

int (*demo2)(int);

       demo2         //名稱是demo2,demo2是一個...

      *               //指向...的指針int (      )(int);  //一個函數,參數是int,返回一個int類型數據

/*demo2是一個指向函數的指針,函數有一個int類型參數,返回一個int類型數據。*/

 

int (*demo3(int))(void);

       demo3                //名稱是demo3

      *     (int)  //demo3是一個函數,參數是int,返回一個指向...的指針

int (           )(void);  //一個函數,參數是void,返回一個int類型數據

/*demo3是一個帶有一個int型參數,返回值為一個沒有參數的函數,函數返回值為int的函數指針。*/

 

int (*(*demo4)(int))(void);

          demo4             //名稱是demo4

        *                    //demo4是指向...的指針

      *(       )(int)       //一個函數,參數int,返回指向...的指針

int (              )(void); //一個函數,無參數,返回int

/*demo4是指向一個帶有一個int型參數,返回一個無參數返回值為int的函數指針的函數的指針。*/

 

int (*(*demo5[10])(int))(void);

          demo5                     //名稱是demo5

               [10]                 //demo5是一個有10個...類型數據元素的數組

        *                            //指向...的指針

      *(          )(int)           //一個函數,參數是int,返回一個指向...的指針

int (                  )(void);   //一個函數,無參數,返回一個int類型的數據

/*demo5是一個有10個函數指針為元素的指針數組,指針數組元素指向的函數是帶有一個int型參數,返回一個無參數返回值為int的函數指針的函數。*/

 

int (*(*(*demo6)[10])(int))(void);

            demo6                     //名稱是demo6

           *                          //demo6是一個指向...的指針

         *(      )[10]                //有10個元素的數組,數組元素類型是指向...的指針

       *(             )(int)          //一個函數,參數是int,返回一個指向...的指針

int (                     )(void);  //一個函數,無參數,返回一個int類型的數據

 

int (*(*(*demo7)[10])(void (*cb)(int)))(void);

            demo7                              //名稱demo7

           *                                    //demo7是一個指向...的指針

        *(      )[10]                          //有10個元素的數組,數據元素類型是指向...的指針

      *(             )(    . . . .    )      //一個函數,參數是...,返回值為一個指向...的指針

      *(             )(      *        )        //一個函數,參數是一個指向...的指針,返回值為一個指向...的指針

      *(             )(void (   )(int))     //一個函數,參數是一個指向一個函數(參數int)的指針,返回值為一個指向...的指針

int (                                 )(void); //一個函數,無參數,返回值為int類型數據

/*demo7是一個指向有10個函數指針為元素的數組的指針,指針數組元素指向的函數是以一個帶一個int型參數返回為空的函數指針為參數,返回一個無參數返回值為int的函數指針的函數。*/

 

int (*(*(*const demo8)[10])(void (*cb)(int)))(void);

                   demo8                                 //名稱是demo8

           *const                                       //demo8是一個指向...的指針常量

        *(            )[10]                            //有10個元素的數組,元素數據類型是指向...的指針

     *(                   )(   . . . . .   )          //一個函數,參數是...,返回值為一個指向...的指針

                                      *                   //一個指向...的指針

                              void (   )(int)           //一個函數,參數是int,返回void

int (                                       )(void);   //一個函數,參數是void,返回int

/*demo8是一個指向有10個函數指針為元素的數組的指針常量(指針不可變),指針數組元素指向的函數是以一個帶一個int型參數返回為空的函數指針為參數,返回一個無參數返回值為int的函數指針的函數。*/

 

int * const * (*(*demo9)[10])(void (*cb)(int));

                     demo9                           //名稱是demo9

                    *                                //demo9是一個指向...的指針

                  *(      )[10]                      //有10個元素的數組,元素數據類型是指向...的指針

               * (             )(    . . . .    )    //一個函數,參數是...,返回值為一個指向...的指針

                                         *             //     參數是一個指向...的指針

                                  void (   )(int)     //     一個函數,參數是int,返回void

 * const                                       //指向...的指針常量

int                                               //int類型數據

/*demo9是一個指向有10個函數指針為元素的數組的指針,指針數組元素指向的函數,是以一個帶一個int型參數返回為空的函數指針為參數,返回指向一個int類型數據的指針常量的指針。*/

 

int * const * (*(*demo10)[10])(int (*(*cb)(int))[10]);

                     demo10                                //demo10

                    *                                      //demo10是一個指向...的指針

                  *(       )[10]                           //有10個元素的數組,元素數據類型是指向...的指針

               * (              )(     .  .  .  .      );  //一個函數,參數是...,返回值為一個指向...的指針

                                   (       *             );  //     參數是一個指向...的指針

                                   (     *(   )(int)     );  //     一個函數,參數是int,返回一個指向...的指針 

                                   (int (           )[10]);  //     一個有10個元素的數組,數組元素類型是int

 * const                                             //指向...的指針常量

int                                                     //int類型數據

上一篇:typedef分析理解

下一篇:LINUX 啟動logo 總結

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 国产精品三级在线| 国产欧美一区二区三区四区| 国产精品激情av电影在线观看| 日韩av综合网| 欧美电影免费播放| 91午夜在线播放| 插插插亚洲综合网| 国产精品免费久久久| 尤物tv国产一区| 欧美亚洲激情在线| 亚洲热线99精品视频| 亚州成人av在线| 亚洲人成五月天| 欧美在线视频免费| 中文字幕国产精品| 国产精品久久久久久久久久新婚| 在线视频免费一区二区| 国产91成人video| 中文字幕日韩精品有码视频| 97热在线精品视频在线观看| 亚洲欧美精品在线| 欧美综合在线观看| 久久久国产视频| 成人免费视频a| 精品国产91久久久久久老师| 亚洲自拍高清视频网站| 日韩欧美精品免费在线| 精品视频久久久久久久| 国产91露脸中文字幕在线| 久久亚洲精品国产亚洲老地址| 成人免费午夜电影| 午夜美女久久久久爽久久| 亚洲天堂色网站| 成人在线精品视频| 97国产精品视频人人做人人爱| 中文字幕精品一区久久久久| 成人夜晚看av| 国产成人精品免费视频| 欧美电影在线观看高清| 正在播放国产一区| 日韩精品高清在线观看|