<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            精心整理的c語言常考的筆試題

            時間:2023-04-05 03:23:19 筆試題目 我要投稿
            • 相關推薦

            精心整理的關于c語言常考的筆試題

              一、 想說一說關于集中數據類型的sizeof問題,這題出現率40%

            精心整理的關于c語言常考的筆試題

              sizeof就是求在內存總占多少字節的問題,最基本的char 1字節 short 2字節 int 4字節

              任何的指針都是4字節 sizeof(數組名)=數組占的大小(這里必須注意雖然數組名可作為只想數組首地址的指針,但是sizeof(數組名)求得的不是指針的大小,而是數組大小)

              還有就是sizeof(結構體) sizeof(聯合體)

              舉兩個例子 struct stu {

              Char a;

              Int b;

              Char c;

              };

              struct teacher {

              Char a;

              Char c;

              Int b;

              };

              Sizeof (stu) =12 ;內存中這樣存儲 char 空空空 int char 空空空

              內存4字節對其問題

              Sizeof (teacher) =8 ;內存中這樣存儲 char char空空 int

              關于聯合體

              Union std{

              Char a[10];

              Int b[3];

              }

              Sizeof(std)=12; 聯合體公用內存,取其中所占內存最大的元素為聯合體所占內存

              以下為Windows NT下的32位C++程序,請計算sizeof的值

              char str[] = “Hello” ;

              char *p = str ;

              int n = 10;

              1. 請計算

              sizeof (str ) = 6

              sizeof ( p ) = 4

              sizeof ( n ) = 4

              void Func ( char str[100])

              {

              請計算

              sizeof( str ) = 4

              }

              void *p = malloc( 100 );

              請計算

              sizeof ( p ) = 4

              還有位段的問題如下

              分析:

              struct bit

              { int a:3;

              int b:2;

              int c:3;

              };

              int main()

              {

              bit s;

              char *c=(char*)&s;

              cout<

              *c=0x99;

              cout << s.a <

              int a=-1;

              printf("%x",a);

              return 0;

              }

              輸出為什么是

              4

              1

              -1

              -4

              ffffffff

              因為0x99在內存中表示為 100 11 001 , a = 001, b = 11, c = 100

              當c為有符合數時, c = 100, 最高1為表示c為負數,負數在計算機用補碼表示,所以c = -4;同理

              b = -1;

              當c為有符合數時, c = 100,即 c = 4,同理 b = 3

              位域 :

              有些信息在存儲時,并不需要占用一個完整的字節, 而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省存儲空間,并使處理簡便,C語言又提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域, 并說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。一、位域的定義和位域變量的說明位域定義與結構定義相仿,其形式為:

              struct 位域結構名

              { 位域列表 };

              其中位域列表的形式為: 類型說明符 位域名:位域長度

              例如:

              struct bs

              {

              int a:8;

              int b:2;

              int c:6;

              };

              位域變量的說明與結構變量說明的方式相同。 可采用先定義后說明,同時定義說明或者直接說明這三種方式。例如:

              struct bs

              {

              int a:8;

              int b:2;

              int c:6;

              }data;

              說明data為bs變量,共占兩個字節。其中位域a占8位,位域b占2位,位域c占6位。對于位域的定義尚有以下幾點說明:

              1. 一個位域必須存儲在同一個字節中,不能跨兩個字節。如一個字節所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

              struct bs

              {

              unsigned a:4

              unsigned :0 /*空域*/

              unsigned b:4 /*從下一單元開始存放*/

              unsigned c:4

              }

              在這個位域定義中,a占第一字節的4位,后4位填0表示不使用,b從第二字節開始,占用4位,c占用4位。

              2. 由于位域不允許跨兩個字節,因此位域的長度不能大于一個字節的長度,也就是說不能超過8位二進位。

              3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

              struct k

              {

              int a:1

              int :2 /*該2位不能使用*/

              int b:3

              int c:2

              };

              從以上分析可以看出,位域在本質上就是一種結構類型, 不過其成員是按二進位分配的。

              位域的使用位域的使用和結構成員的使用相同,其一般形式為: 位域變量名•位域名 位域允許用各種格式輸出。

              main(){

              struct bs

              {

              unsigned a:1;

              unsigned b:3;

              unsigned c:4;

              } bit,*pbit;

              bit.a=1;

              bit.b=7;

              bit.c=15;

              pri

              二、 關于動態申請內存的問題 這題出現率極高,60%不為過

              void GetMemory(char *p)

              {

              p = (char *)malloc(100);

              }

              void Test(void)

              {

              char *str = NULL;

              GetMemory(str);

              strcpy(str, "hello world");

              printf(str);

              }

              請問運行Test函數會有什么樣的結果?

              答:試題傳入GetMemory( char *p )函數的形參為字符串指針,在函數內部修改形參并不能真正的改變傳入形參的值,執行完

              char *str = NULL;

              GetMemory( str );

              后的str仍然為NULL;

              char *GetMemory(void)

              {

              char p[] = "hello world";

              return p;

              }

              void Test(void)

              {

              char *str = NULL;

              str = GetMemory();

              printf(str);

              }

              請問運行Test函數會有什么樣的結果?

              答:可能是亂碼。 char p[] = "hello world";

              return p;

              的p[]數組為函數內的局部自動變量,在函數返回后,內存已經被釋放。這是許多程序員常犯的錯誤,其根源在于不理解變量的生存期。

              void GetMemory2(char **p, int num)

              {

              *p = (char *)malloc(num);

              }

              void Test(void)

              {

              char *str = NULL;

              GetMemory(&str, 100);

              strcpy(str, "hello");

              printf(str);

              }

              請問運行Test函數會有什么樣的結果?

              答:

              (1)能夠輸出hello

              (2 )Test函數中也未對malloc的內存進行釋放。

              (3)GetMemory避免了試題1的問題,傳入GetMemory的參數為字符串指針的指針,但是在GetMemory中執行申請內存及賦值語句

              *p = (char *) malloc( num );

              后未判斷內存是否申請成功,應加上:

              if ( *p == NULL )

              {

              ...//進行申請內存失敗處理

              }

              void Test(void)

              {

              char *str = (char *) malloc(100);

              strcpy(str, “hello”);

              free(str);

              if(str != NULL)

              {

              strcpy(str, “world”);

              printf(str);

              }

              }

              請問運行Test函數會有什么樣的結果?

              答:執行

              char *str = (char *) malloc(100);

              后未進行內存是否申請成功的判斷;另外,在free(str)后未置str為空,導致可能變成一個“野”指針,應加上:

              str = NULL;

              三、基本關鍵字的提問

              常考的

              Static extern volatile const register

              register 是把一個變量聲明為寄存器變量,和auto相對,auto是讓編譯器自動決定那些變量放在寄存器里,顯然讓編譯器去決定更合理,所以這個關鍵字不常用,而聲明變量時不寫auto的話則自動會成為auto變量, int a; 和auto int a;效果是一樣的,這兩個只需要了解。

            【精心整理的c語言常考的筆試題】相關文章:

            華為C語言筆試題12-12

            華為筆試題(C語言)12-10

            基礎C++/C語言筆試題分享11-21

            小升初《水滸傳》的常考知識整理06-27

            廣告公司常考筆試題08-10

            小升初語文常考辨音試題歸納08-10

            yahoo在線筆試題(c語言)12-12

            C語言筆試試題及答案07-31

            c語言筆試題目及答案08-17

            投資顧問面試常考筆試題分享!11-19

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看