第一題
1. int a[10] = {2,3,5}, 請問a[3]及a[3]之后的數值是()
A:不確定的數據
B:5
C:0
D:0xf f f f f f f f
答案及解析?C
數組的不完全初始化,會自動把沒初始化的部分初始化為0;
第二題
2. 引用標準庫時,下面的說法正確的是()
A:語句#include?“stdlib.h”是正確的,而且程序編譯速度比#include< stdlib.h >要快
B:語句#include< stdlib.h >是正確的,而且程序編譯速度比#include?“stdlib.h”要快
C:語句#include< stdlib.h >和#include?“stdlib.h”都是正確的,程序編譯速度沒有區別
D:語句#include?“stdlib.h”是錯誤的
答案及解析?B
#include "" 是先在當前的工作目錄上去找" "里面的頭文件,若沒找到,再去標準庫去找;
#include <>則是先去標準庫去找,找不到再去當前工作目錄;
所以stdlib.h 是一個C標準庫里面的頭文件,所以<stdlib.h>一定更快;
第三題
3.?在32位機器上,有如下代碼:輸出結果為()
#include <stdio.h>
void func0()
{char array[] = "abcdefg";printf("%d ", sizeof(array));const char *p = "abcdefg";printf("%d ", sizeof(p));
}
void func1(char p[10])
{printf("%d ", sizeof(p));
}
int main()
{char p[10] = "hello";func0();func1(p);printf("%d ", sizeof(char[2]));return 0;
}
A:8 4 4?2
B:4 4 4?4
C:8 8 4?2
D:8 4 4?1
答案及解析 A
func0里面
第一個輸出 :sizeof數組名表示的是整個數組的大小,但是別忘了一個隱藏的\0,所以為8;
第二個輸出:sizeof(p),p是一個指針類型,32位下是4字節,所以為4;
func1這里
第三個輸出:傳入的是一個數組名,所以數組在傳參的時候會退化成指針類型,p其實是一個指針類型,char *類型,sizeof(p),依舊是4字節;
第四個輸出:sizeof(char [2])這里的char [2]其實是一個數據類型,表示的是一個char數組,有兩個元素,所以為2字節;
答案就是8442;
大家有想繼續練習sizeof的,可以看這幾個博客:
全網最詳細的sizeof運算和strlen函數講解(通過多種數據類型舉例)_sizeof怎么計算字節長度-CSDN博客
sizeof運算和strlen函數的筆試題(三)-CSDN博客
sizeof運算與strlen函數筆試題(二)-CSDN博客
sizeof運算與strlen函數的面試筆試題(排版很舒服)-CSDN博客
第四題
4. 以下程序的運行結果是()
#include <stdio.h>
#define MIN(x,y) (x)<(y) ? (x):(y)
int main()
{int i = 10, j = 15, k;k = 10*MIN(i, j);printf ("%d\n", k);
}
A:10
B:15
C:100
D:150
答案及解析??B
本題考查#define的替換和運算符優先級
k = 10 * MIN(i, j) = 10 * (x) < (y) ? (x) : (y) = 10 * 10 < 15 ? 10 : 15
*的優先級高于條件操作符
所以 k = 100 < 15 ? 10 : 15 = 15;
第五題
5. 32位系統下下面程序的輸出結果為多少?
#include <stdio.h>
void Func(char str_arg[100])
{printf("%d\n", sizeof(str_arg));
}
int main()
{char str[] = "Hello";printf("%d\n", sizeof(str));printf("%d\n", strlen(str));char*p = str;printf("%d\n", sizeof(p));Func(str);
}
A:5 5 4 4
B:6 5 4 4
C:6 5 6 4
D:5 5 5 100
答案及解析 B
?前兩個就不解釋了,分別為6,5;因為有隱藏的\0,sizeof算,strlen不算
具體博客:全網最詳細的sizeof運算和strlen函數講解(通過多種數據類型舉例)_sizeof怎么計算字節長度-CSDN博客
第三個,p是指針類型,sizeof(p)是算的指針類型,32位下指針類型4字節
第四個,這里要知道數組在傳參的時候,會轉換成指針,所以str_arg是一個指針類型,依舊位4;