• <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 閱讀(394) 評論(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
            国产女人aaa级久久久级| 99久久精品免费看国产一区二区三区| 一级做a爰片久久毛片免费陪| 亚洲婷婷国产精品电影人久久| 伊人久久无码中文字幕| 国产精品久久久久乳精品爆| 久久这里只有精品18| 午夜精品久久久久| 久久国产精品免费一区二区三区| 欧美黑人激情性久久| 亚洲va久久久噜噜噜久久狠狠 | 久久婷婷五月综合97色| 中文字幕无码av激情不卡久久 | 精品综合久久久久久97超人| 久久99国产精品久久99果冻传媒| 中文成人久久久久影院免费观看| 久久综合伊人77777麻豆| 777久久精品一区二区三区无码| 久久99精品国产麻豆| 亚洲国产一成人久久精品| 亚洲国产另类久久久精品小说| 久久国产乱子伦免费精品| 久久综合视频网站| 伊人色综合九久久天天蜜桃| 欧美一区二区三区久久综| 久久99精品九九九久久婷婷| 久久狠狠高潮亚洲精品| 亚洲精品无码专区久久久| 俺来也俺去啦久久综合网| 色欲综合久久躁天天躁| 一本大道加勒比久久综合| 久久久久se色偷偷亚洲精品av| 久久这里有精品视频| 久久国产乱子精品免费女| 久久国产精品无码HDAV| 欧洲精品久久久av无码电影| 久久久久久久久66精品片| 久久国产精品波多野结衣AV| 欧美精品一区二区精品久久| 91精品国产综合久久久久久 | 久久久精品久久久久久|