1、若已定義:int a[9],*p=a,並在以后的語句中未改變p的值,不能表示a[1]地址的表達式是 _______。
A,p+1
B,a+1
C,a++
D,++p
答案:C
[評析] 數組名是指針常量,是個固定的指針,不能對數組名賦予一個新的地址值,也不能使這個指針常駐量“移動”,指向數組的其他元素。
2、設有如下定義:
unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
則下列程序段的輸出結果是什么?
pulPtr = pulArray;
*(pulPtr + 2) += 2;
printf(“%d, %d\r\n”, *pulPtr, *(pulPtr + 2));
答案:6,10
[評析]pulPtr = pulArray;//pulPtr指向pulArray[0]
*(pulPtr + 2) += 2;//pulPtr+2指向pulArray[2] = 8, *(pulPtr + 2) += 2表示pulArray[2]加上2,Array[2]=10
printf(“%d, %d\r\n”du, *pulPtr, *(pulPtr + 2));//輸出pulArray[0],pulArray[2]
//所以是輸出6,10
3、下面程序段的運行結果是
char *s = "abcde",;
s += 2;
printf("%d",s);
A.cde
B.字符'c'
C.字符'c'的地址
D.無確定的輸出結果
答案:C
[解析] 對於字符串指針,其保留的是整個串的首地址,即第一個字符的起始地址;當該指針做算術運算時,就是該指針根據其類型向后移動相應的存儲空間。
4、在VC6,32位X86系統下,有下列程序
輸出結果是:
a.3839 b.3938 c.380039 d.以上答案都不正確
答案:D
[解析] 如果int是4字節的話打印出來應該是0xcccc3839.看樣子應該是VC平台。
共用體里里面定義的成員共用相同的存儲空間,空間大小按照成員中最大的空間分配。
所以k和i[2]共用一塊4字節內存,Win32下低字節在前,所以在內存順序是
k0 k1 k2 k3,但這4個字節又與i[2]共用,即k0與i[0]共用,k1與i[1]共用,
所以i[0]=0x39,i[1]=0x38后同時給k0,k1賦值了。
由於VC調試態下默認將內存空間初始化為0xcc/0xcd,所以會k2=0xcc,k3=0xcc
打印出來k就是k3 k2 k1 k0 就是0xcccc3839了
5、以下關於靜態成員變量的敘述不正確的是
A.靜態成員變量為類的所有對象所公有
B.靜態成員變量可以在類內任何位置上聲明
C.靜態成員變量的賦初值必須放在類外
D.定義靜態成員變量時必須賦初值
答案:D
[解析] 靜態成員變量的引入是為了解決同一類的不同對象間數據共享的需要。
因此,類的靜態數據成員在定義時不能賦初值。只能在類外賦初值,此外要注意賦值時要用類名進行限制。
6、關於靜態變量,下面說法“不正確”的有:
A) 靜態變量在堆棧中分配
B) 靜態變量的作用域一定是局部的,例如在一個文件內或一個函數內
C) 靜態變量可分為靜態局變量和靜態全局部變量
D)靜態變量存在於數據段中
答案:B
7、下面正確的有
A) 在中斷中,不能同步獲取信號量,但是可以釋放信號量
B) 在中斷中,可以使用系統調用 sleep 函數來等待一會兒
C)每一個進程有自己的獨立地址空間,每一個線程程序也有自己的獨立地址空間
D)CPU占用率為60%,意思是CPU有60%的時間在運行指令40%的時間沒有運行指令
答案:B
8、設有如下定義:int (*ptr)(),則以下敘述中正確的是
B. ptr 是指向int 型數據的指針變量
C. ptr 是指向函數的指針 ;該函數返回一個int 型數據
D. ptr 是一個函數名 ;該函數的返回值是指向int 型數據的指針
答案:C。
[解析]ptr函數返回一個int 型數據 //這個才是正確的,理由是int fun();顯然是一個函數說明,fun換為(*ptr),則ptr就是指向函數的指針了。
int (*ptr)[m] ptr是一個指向m長度的線性內存空間,即m大小的一維數組
int(*ptr)() ptr是一個返回值為int ,參數列表為空的函數指針類型。
例如,int *p,先根據優先級,等效於*(p),所以p本質上是一個有三個元素的數組;那么數組的每個元素是一個指針;那指針指向是指向一個int型的數據;所以整理一下就是p是一個有三個指向int數據的指針的數組,本質上就是一個數組。
擴展資料:
int func(int x); /* 聲明一個函數 */
int (*f) (int x); /* 聲明一個函數指針 */
f=func; /* 將func函數的首地址賦給指針f */
ptr是指向函數的指針變量,所以可把函數max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調用該函數,實際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數名稱那樣是死的,它可以指向任何函數,就看你想怎么做了。
9、關於 TCP、UDP 及其上層的應用,描述錯誤的是:
A)TCP 協議面向連接的,UDP 協議是面向無連接的
B) UDP 不保證數據的可靠傳送,而文件的傳遞時要求必須無錯傳送的,因而所有基於文件傳遞的應用都不能基於UDP,如:TFTP
C)telnet是基於TCP的終端應用,連續輸入的多個字符可能會被封裝到一個TCP包中
D)在同一個節點上,基於TCP和UDP的應用端口號可以重疊
答案:B
10、函數重載時,編譯系統會根據(形參的個數或類型)來區分,與(返回類型)無關
11、棧和隊列都是一種(特殊操作)的線性表,棧的插入和刪除只能在(棧頂)進行。
12、若有函數max(a,b),並且已使函數指針變量p指向函數max,當調用該函數時,正確的調用方法是()
[解析]定義:int (*p)(int a, int b);
p=max;
調用:int n=(*p)(a,b);
這是正確的使用方法,對此我最如下解釋。
第一行定義一個指內向函數的指針
第二行把max函數的地址給指針p,即此時p的值是函數的首地址,
第三行對函數進行調用,(*p)表示對p的內容所指向的那個地址進行取值,即運行函數
13、int *p=malloc(100); 求 sizeof(p)
答案:sizeof(p) = 4;
[解析]
sizeof(p) 只能測定 指針大小,32位機上得4。
sizeof 不能測定動態分配的數組大小。
strlen 可用於測定動態分配的字符數組長度但不適合int.
_msize() 可用於測定動態分配的數組用去的內存,通常比數組單元要多一點。