• <tt id="lutwa"></tt>

    <b id="lutwa"></b>

  • <u id="lutwa"><small id="lutwa"></small></u>
    <b id="lutwa"><small id="lutwa"></small></b>
    
    
    <u id="lutwa"><small id="lutwa"></small></u>
  • <u id="lutwa"><small id="lutwa"></small></u>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    關于C語言關鍵字面試題有哪些?

    • 發布:C++培訓
    • 來源:C++職場
    • 時間:2020-04-01 17:50

    本文是作者收集了一些關于C語言關鍵字面試題,此題可以為正在找工作的同事們提供很好的幫助。所以今天就寫篇推送給大伙好好講講這寫關于關鍵字的面試題,也讓我們的學習盡可能和實際崗位需求接軌,話不多說了,請看題:

    問題(一):static關鍵字的作用?

    答:Static的用途主要有兩個,一是用于修飾存儲類型使之成為靜態存儲類型,二是用于修飾鏈接屬性使之成為內部鏈接屬性。

    1、靜態存儲類型:

    在函數內定義的靜態局部變量,該變量存在內存的靜態區,所以即使該函數運行結束,靜態變量的值不會被銷毀,函數下次運行時能仍用到這個值。在函數外定義的靜態變量——靜態全局變量,該變量的作用域只能在定義該變量的文件中,不能被其他文件通過extern引用。

    2、內部鏈接屬性

    靜態函數只能在聲明它的源文件中使用。

    問題(二):const關鍵字的作用?

    答:

    1、聲明常變量,使得指定的變量不能被修改。

    const int a = 5;/*a的值一直為5,不能被改變*/

    const int b; b = 10;/*b的值被賦值為10后,不能被改變*/

    const int *ptr; /*ptr為指向整型常量的指針,ptr的值可以修改,但不能修改其所指向的值*/

    int *const ptr;/*ptr為指向整型的常量指針,ptr的值不能修改,但可以修改其所指向的值*/

    const int *const ptr;/*ptr為指向整型常量的常量指針,ptr及其指向的值都不能修改*/

    2、修飾函數形參,使得形參在函數內不能被修改,表示輸入參數。

    如int fun(const int a);或int fun(const char *str);

    3、修飾函數返回值,使得函數的返回值不能被修改。

    const char *getstr(void);使用:const *str= getstr();

    const int getint(void); 使用:const int a =getint();

    問題(三):volatile關鍵字的作用?

    答:volatile指定的關鍵字可能被系統、硬件、進程/線程改變,強制編譯器每次從內存中取得該變量的值,而不是從被優化后的寄存器中讀取。例子:硬件時鐘;多線程中被多個任務共享的變量等。

    問題(四):extern關鍵字的作用?

    答:

    1、用于修飾變量或函數,表明該變量或函數都是在別的文件中定義的,提示編譯器在其他文件中尋找定義。

    extern int a;

    extern int *p;

    extern int array[];

    extern void fun(void);

    其中,在函數的聲明帶有關鍵字extern,僅僅是暗示這個函數可能在別的源文件中定義,沒有其他作用。如:

    頭文件A:A_MODULE.h中包含

    extern int func(int a, int b);

    源文件A: A_MODULE.c中

    #include “A_MODULE.h”

    int func(int a, int b)

    {

    returna+b;

    }

    此時,展開頭文件A_MODULE.h后,為

    extern int func(int a, int b);/*雖然暗示可能在別的源文件中定義,但又在本文件中定義,所以extern并沒有起到什么作用,但也不會產生錯誤*/

    int func(int a, int b)

    {

    returna+b;

    }

    而源文件B:B_MODULE.c中,

    #include “A_MODULE.h”

    int ret = func(10,5);/

    展開頭文件A_MODULE.h后,為

    extern int func(int a, int b);/*暗示在別的源文件中定義,所以在下面使用func(5,10)時,在鏈接的時候到別的目標文件中尋找定義*/

    int ret = func(10,5);

    2、用于extern “c

    extern “c”的作用就是為了能夠正確實現C++代碼調用其他C語言代碼。加上extern "C"后,會指示編譯器這部分代碼按C語言的編譯方式進行編譯,而不是C++的。

    C++作為一種與C兼容的語言,保留了一部分面向過程語言的特點,如可以定義不屬于任何類的全局變量和函數,但C++畢竟是一種面向對象的語言,為了支持函數的重載,對函數的編譯方式與C的不同。例如,在C++中,對函數void fun(int,int)編譯后的名稱可能是_fun_int_int,而C中沒有重載機制,一般直接利用函數名來指定編譯后函數的名稱,如上面的函數編譯后的名稱可能是_fun。

    這樣問題就來了,如果在C++中調用的函數如上例中的fun(1,2)是用C語言在源文件a_module.c中實現和編譯的,那么函數fun在目標文件a_module.obj中的函數名為_fun,而C++在源文件b_module.cpp通過調用其對外提供的頭文件a_module.h引用后,調用fun,則直接以C++的編譯方式來編譯,使得fun編譯后在目標文件b_module.obj的名稱為_fun_int_int,這樣在鏈接的時候,因為_fun_int_int的函數在目標文件a_module.obj中不存在,導致了鏈接錯誤。

    解決方法是讓b_module.cpp知道函數fun是用C語言實現和編譯了,在調用的時候,采用與C語言一樣的方式來編譯。該方法可以通過extern “C”來實現(具體用法見下面)。一般,在用C語言實現函數的時候,要考慮到這個函數可能會被C++程序調用,所以在設計頭文件時,應該這樣聲明頭文件:

    /*頭文件a_module.h*/

    /*頭文件被CPP文件include時,CPP文件中都含有該自定義的宏__cplusplus*/

    /*這樣通過extern “C”告訴C++編譯器,extern “C”{}里包含的函數都用C的方式來編譯*/

    #ifdef __cplusplus

    extern “C”

    {

    #endif

    extern void fun(int a, int b);

    #ifdef __cplusplus

    }

    #endif

    extern "C"的使用方式

    1、可以是單一語句

    extern "C" doublesqrt(double);

    2、可以是復合語句, 相當于復合語句中的聲明都加了extern "C"

    extern "C"

    {

    double sqrt(double);

    int min(int, int);

    }

    3、可以包含頭文件,相當于頭文件中的聲明都加了extern"C"

    extern "C"

    {

    #include <cmath>

    }

    4、不可以將extern"C" 添加在函數內部

    5、如果函數有多個聲明,可以都加extern"C", 也可以只出現在第一次聲明中,后面的聲明會接受第一個鏈接指示符的規則。

    6、除extern"C", 還有extern "FORTRAN" 等。

    問題(五):sizeof關鍵字的作用?

    答:

    sizeof是在編譯階段處理,且不能被編譯為機器碼。sizeof的結果等于對象或類型所占的內存字節數。sizeof的返回值類型為size_t。

    變量:int a; sizeof(a)為4;

    指針:int *p; sizeof(p)為4;

    數組:int b[10]; sizeof(b)為數組的大小,4*10;int c[0]; sizeof(c)等于0

    結構體:struct (int a; char ch;)s1; sizeof(s1)為8 與結構體字節對齊有關。

    注意:不能對結構體中的位域成員使用sizeof

    sizeof(void)等于1

    sizeof(void *)等于4

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:關于C語言預處理面試題有哪些?
    下一篇:C/C++后臺開發面試難不難,來看看京東

    幾個C語言經典基礎算法(含代碼)

    不得不知道的八個C語言面試題

    C/C++后臺開發面試難不難,京東二面

    C/C++后臺開發面試難不難,來看看京東

    • 關注微信公眾號

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美牲交av欧美牲交aⅴ暴力,俄罗斯freeⅹ性欧美,日本加勒比无码中文字幕,放荡的女教师中文字幕