
📌 本文作者: Foxny
📃 更新記錄: 2021.7.18
? 勘誤記錄: 某一處陣列記憶體圖示錯數字(鳴謝:小雪山飛狐)
📜 本文宣告: 由于作者水平有限,本文有錯誤和不準確之處在所難免,本人也很想知道這些錯誤,懇望讀者批評指正!
指標筆試題(答案+詳解)
📚 說明:
① 建議做題時拿出紙和筆寫出你認為的結果;
② 建議先把答案遮住(不小心看到也沒事),看看你哪里想錯了,重要的不是結果;
③ 對于做錯的題,可以看題目答案下面的決議部分,以便深入理解;
第一題:
💬 下列程式運行后的結果是什么?
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
💡 本題答案:
2,5
🔑 詳細決議:

第二題:
💬 假設 p 的值為 0x100000,如下運算式的值分別為多少?
(已知結構體 Test 型別的變數大小為 20 個位元組)
// 由于還沒有學習結構體,這里告知結構體大小是20個位元組
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
int main()
{
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}
💡 本題答案:
00000014
00000001
00000004
🔑 詳細決議:

第三題:
💬 下列程式運行后的結果是什么?
int main()
{
int a[4] = { 1,2,3,4 };
int* ptr1 = (int*) (&a + 1);
int* ptr2 = (int*) ((int)a + 1);
printf("%x, %x", ptr1[-1], *ptr2);
return 0;
}
💡 本題答案:
4, 2000000
🔑 詳細決議:

第四題:
💬 下列程式運行后的結果是什么?
int main()
{
int a[3][2] = { (0, 1), (2, 3),(4, 5) };
int* p;
p = a[0];
printf("%d", p[0]);
return 0;
}
💡 本題答案:
1
🔑 詳細決議:

第五題:
💬 下列程式運行后的結果是什么?
int main()
{
int a[5][5];
int(*p)[4];
p = a;
printf("%p, %d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
return 0;
}
💡 本題答案:
FFFFFFFC, -4
🔑 詳細決議:

第六題:
💬 下列程式運行后的結果是什么?
int main()
{
int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int* ptr1 = (int*)(&aa + 1);
int* ptr2 = (int*)(*(aa + 1));
printf("%d, %d", *(ptr1 - 1), *(ptr2 - 1));
return 0;
}
💡 本題答案:
10, 5
🔑 詳細決議:

第七題:
💬 下列程式運行后的結果是什么?
int main()
{
char* a[] = { "work", "at", "alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}
💡 本題答案:
at
🔑 詳細決議:

第八題:
💬 下列程式運行后的結果是什么?
int main()
{
char *c[] = {"ENTER", "NEW", "POINT", "FIRST"};
char**cp[] = {c+3, c+2, c+1, c};
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2] + 3);
printf("%s\n", cpp[-1][-1] + 1);
return 0;
}
💡 本題答案:
POINT
ER
ST
EW
🔑 解題思路圖:

彩蛋:

本篇完
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289346.html
標籤:其他
