• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            一些糾結的c代碼

            Posted on 2012-05-28 11:52 Onway 閱讀(383) 評論(0)  編輯 收藏 引用 所屬分類: 碼兒快跑
            摘自《c專家編程》,代碼和答案都是基于gcc 4.6.1和32位linux系統。
            某些解釋不夠全面和正確,如果是錯誤,請指正。

            1,解釋該聲明的含義:
            char * const *(*next)();

            2,解釋該聲明的含義:
            char *(* c[10])(int **p);

            3,解釋三個const的作用對象:
                    int foo(const char * const * const p);

            4,下面的賦值為什么不能進行:
            char **a = NULL;
            const char **b = a;

            5,下面的代碼輸出是什么:
            main(int argc, char *argv[])
            {
            unsigned int a = 2;
            int b = -2;
            if (a > b)
            printf("a > b\n");
            else  if (a == b)
            printf("a == b\n");
            else
            printf("a < b\n");
            }

            6,下面代碼輸出的是什么:
            foo(short int *a)
            {
            *(long int *)a = 0xFFFFFFFFL;
            }
            main(int argc, char *argv[])
            {
            short int a = 1;
            short int b = 2;
            foo(&a);
            printf("b = %hu\n", b);
            }

            7,下面的代碼輸出是什么:
            float a = 1.0;
            long long int b = 1;
            printf("%u\n", sizeof(a + b));

            8,解釋signal函數的聲明:
            void (*signal(int sig, void(*func)(int)))(int);

            9,解釋下面三個類型:
            typedef int *ptr, (*fun)(), arr[5];

            10,糾結不?
            unsigned const long typedef int volatile *Shit;

            11,解釋為什么在file2中使用s[i]會產生錯誤:
            /* file1 */
            int s[3] = {1, 2, 3};
            /* file2 */
            extern int *s;

            12,下面語句的輸出是多少?
            printf("%d\n", sizeof 'a');

            13,下面代碼的輸出是多少?
            func(char p[])
            {
            printf("%u\n", sizeof(p));
            }
            main()
            {
            char a[] = "hello";
            func(a);
            }



            個人理解的答案:
            1,
            char * const *(*next)();
            next是一個函數指針,其指向的函數不帶參數,返回一個指向const char字符的指針的指針。

            2,
            char *(* c[10])(int **p);
            c是一個函數指針數組,數組大小為10,所指向的函數帶一個int **參數,返回char *類型。

            3,
            int foo(const char * const * const p);
            第一個const修飾第二個星號表示的指針;
            第二個const修飾第二個星號表示的指針所指的對象char字符;
            第三個const修飾指針p;

            4,
            第一個星號表示的指針所指向的對象不同,指針類型不同。

            5,輸出:a < b

            6,輸出:b = 65535

            7,輸出:4

            8,
            void (*signal(int sig, void(*func)(int)))(int);
            signal是一個函數,接受一個int和func函數指針,返回一個函數指針。

            9,
            typedef int *ptr, (*fun)(), arr[5];
            ptr是int*類型,
            func是函數指針類型,函數返回int,參數為空
            arr是int數組類型,長度是5

            10,
            unsigned const long typedef int volatile *Shit;
            Shit是unsigned const long int volatile *類型。

            11,
            兩個s具有相同的地址值,但file2中,被聲明為指針,s指針所指地址不確定。

            12,輸出:1

            13,輸出:4
            亚洲va中文字幕无码久久不卡| 久久精品国产亚洲av麻豆图片| 久久精品人人做人人爽电影| 成人国内精品久久久久影院VR| 精品国产青草久久久久福利 | 99久久综合国产精品免费| 精品久久久久久国产| 久久99国产精品久久| 久久国产成人精品国产成人亚洲| 一个色综合久久| 久久精品人人做人人爽电影| 7777精品伊人久久久大香线蕉| 国产一级持黄大片99久久| 麻豆av久久av盛宴av| 国产91久久综合| 久久精品亚洲一区二区三区浴池 | 久久精品中文无码资源站| 久久精品无码免费不卡| 国产精品久久久久天天影视| 久久精品国产清自在天天线| 久久久久国产一区二区三区| 国产精品久久久久久久| 久久精品人妻中文系列| 亚洲国产香蕉人人爽成AV片久久| 久久精品国产一区| 国产精品99精品久久免费| 一本一本久久A久久综合精品| 久久免费99精品国产自在现线 | 久久久久噜噜噜亚洲熟女综合| 999久久久免费精品国产| 久久久久人妻一区精品性色av| 亚洲αv久久久噜噜噜噜噜| 久久精品桃花综合| 青青草原综合久久大伊人| 无夜精品久久久久久| 性做久久久久久久久| 久久午夜福利电影| 午夜精品久久影院蜜桃| 久久免费国产精品| 久久综合亚洲色一区二区三区| 人人妻久久人人澡人人爽人人精品 |