• <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
            久久久久久国产a免费观看不卡 | 久久毛片一区二区| 久久精品综合一区二区三区| 狠狠色丁香久久婷婷综合图片| 国产A三级久久精品| 99久久亚洲综合精品成人| 久久久久九九精品影院| 亚洲第一极品精品无码久久| 国产叼嘿久久精品久久| 欧美va久久久噜噜噜久久| 久久国产热这里只有精品| 成人久久免费网站| 一级做a爰片久久毛片16| 麻豆精品久久久久久久99蜜桃| 青青草原1769久久免费播放| 亚洲中文字幕无码一久久区| 久久se精品一区二区影院| 久久99国产综合精品| 久久这里有精品视频| 日韩精品久久久久久| av无码久久久久久不卡网站 | 久久久久久曰本AV免费免费| 国产视频久久| 久久精品成人免费看| 97精品依人久久久大香线蕉97 | 国产精品久久久久一区二区三区| 囯产极品美女高潮无套久久久 | 日日躁夜夜躁狠狠久久AV| 亚洲人成无码久久电影网站| 日本道色综合久久影院| 97r久久精品国产99国产精| 奇米影视7777久久精品| 一本久久知道综合久久| 久久精品国产男包| 久久久久久精品免费看SSS| 国产精品久久久久蜜芽| 无夜精品久久久久久| 性做久久久久久久久| 性做久久久久久久久老女人| 色妞色综合久久夜夜| 国产成人久久精品一区二区三区|