目錄
- 例題一
- 題目解析
- 答案
- 例題二
- 題目解析
- 答案
- 例題三
- 題目解析
- 答案
- 例題四
- 題目解析
- 答案
- 例題五
- 題目解析
- 答案
- 例題六
- 題目解析
- 答案
- 例題七
- 題目解析
- 答案
感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接
🐒🐒🐒 個人主頁
🥸🥸🥸 C語言
🐿?🐿?🐿? C語言例題
🐣🐓🏀 python
例題一
以下系統中,int類型占幾個字節,指針占幾個字節,操作系統可以使用的最大內存空間是多大:( )
A.32位下:4,4,2^32 64位下:8,8,2^64
B.32位下:4,4,不限制 64位下:4,8,不限制
C.32位下:4,4,2^32 64位下:4,8,2^64
D.32位下:4,4,2^32 64位下:4,4,2^64
題目解析
32位系統下:
int占4個字節,指針表示地址空間個數,總共有2^32個,故占4個字節
64位系統下:
int占4個字節,指針表示地址空間個數,總共有2^64個,故占8個字節
注意指針是表示的是地址空間,而地址會因為系統不同而不同,比如32位的系統,一個地址就需要32個比特位來表示,而指針如果想要表示這個地址的話,同樣也需要32個比特位才可以,所以在32為的系統條件下,指針占32個比特位也就是4個字節
答案
答案:C
例題二
下面代碼的結果是:( )
#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0;
}
A.1 2 3 4 5
B.0 0 3 4 5
C.0 0 0 0 5
D.1 0 0 0 0
題目解析
注意數組arr一開始是整形類型的數組,而之后用short * p = (short*)arr將arr強制轉換為short*,并且用short類型的指針p來接收
后面在通過*(p+1)來對數組的元素重新賦值,最后再打印
我們知道short類型的元素占2個字節,也就是16個比特位,而int類型的元素占4個字節,也就是32個比特位
因此下面是arr各元素的內存
01 00 00 00表示arr[0].02 00 00 00表示arr[1]…,
當我們for循環修改arr里面的元素時,過程如下
答案
答案 B
例題三
關于二級指針描述描述正確的是:( )
A.二級指針也是指針,只不過比一級指針更大
B.二級指針也是指針,是用來保存一級指針的地址
C.二級指針是用來存放數組的地址
D.二級指針的大小是4個字節
題目解析
A:二級指針是指針,不能說起比一級指針大,只能說二級指針指向的空間中存儲的也是一個地址
C:數組的地址一般用一級指針存儲,或者用數組指針接收
D:二級指針是指針,但是否占4個字節不一定,要看具體的系統,如果是32為的系統就是4個字節,但如果是64為的系統則是8個字節
答案
答案 B
例題四
下面關于指針運算說法正確的是:( )
A.整形指針(int*類型)+1,向后偏移一個字節
B.指針-指針得到是指針和指針之間的字節個數
C.整形指針解引用操作訪問4個字節
D.指針不能比較大小
題目解析
A:整形指針+1,向后便宜一個整形類型的大小,即4個字節
B:兩個指針相減,指針必須指向一段連續空間,減完之后的結構代表兩個指針之間相差元素的個數
C:整形指向的是一個整形的空間,解引用操作訪問4個字節
D:指針中存儲的是地址,地址可以看成一個數據,因此是可以比較大小的
答案
答案 C
例題五
下面哪個是指針數組:( )
A. int* arr[10];
B.int * arr[];
C.int **arr;
D.int (*arr)[10];
題目解析
關于指針數組等相類似的如果有不懂的可以看我之前的一些文章
C語言深入理解指針(非常詳細)(三)
C語言深入理解指針(非常詳細)(四)
指針數組是一個數組,該數組的每個元素是一個指針
A:定義了一個數組,該數組中有10個元素,每個元素都是int*的指針類型
B:編譯失敗,定義數組時,要給出空間的大小,如果沒有給時,必須要給出初始化結果
C:定義了一個二級指針(不用因為一個arr就認為是數組,數組在定義的時候需要 [ ] )
D:*和arr先結合,說明arr不是數組。實際上arr是一個指針,一個指向數組的指針(也就是數組指針)
答案
答案 A
例題六
下列程序段的輸出結果為( )
unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray;
*(pulPtr + 3) += 3;
printf("%d,%d\n",*pulPtr, *(pulPtr + 3));
A.9,12
B.6,9
C.6,12
D.6,10
題目解析
unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray; // 數組名代表數組首元素地址,因此pulptr指向的是數組中第一個元素的位置
*(pulPtr + 3) += 3; // pulptr+3訪問的是數組中第三個元素(數組下標從0開始)
(即 * (pulPtr + 3)=pulPtr[3], * (pulPtr + 3)+3=pulPtr[3]+3),因為一開始puPtr[3]=pulArray[3]=9,所以最后結果就是將9改為9+3=12
printf(“%d,%d\n”,*pulPtr, *(pulPtr + 3)); // 打印第一個和第三個元素,因此:打印6和12
答案
答案 C
例題七
關于指針的概念,錯誤的是:( )
A.指針變量是用來存放地址的變量
B.指針變量中存的有效地址可以唯一指向內存中的一塊區域
C.野指針也可以正常使用
D.局部指針變量不初始化就是野指針
題目解析
A:指針變量中存儲的是一個地址,指向同類型的一塊內存空間
B:地址是唯一的,一個指針變量中只能存儲一個地址,因此可以唯一指向內存中的一塊區域
C:野指針指向的空間時非法的,或者說該指針指向的空間已經不存在了,因此野指針不能使用
D:局部指針變量沒有初始化時里面就是隨機值,因此指向那個位置不一定,故將其看成是野指針
答案
答案 C