易錯的C語言題目

2021-10-06 05:08:24 字數 468 閱讀 7801

這道題是我在網上看到的。拿出來給大家一起學習學習

#include int main (void)

; int *p=(int *)(&a+1);

printf("*(p-1)=%d,*(p+1)=%d,*p=%d\n",*(p-1),*(p+1),*p);

printf("%d %d",sizeof(a),sizeof(&a));

return 0;

}

題目看似簡單,其實重點難點在於理解&a+1的含義。

解釋:&a+1 要與  a+1  區分開來。&a+1  是加了一整個a陣列,偏移了整個陣列的大小,在本題中也就是5個int的大小。通俗地說就是p指向的是a[5],在a陣列種明顯是越界了。p-1指向a[4],可以正常輸出a[4]。如果將程式中的&a+1換成a+1,則p指向的是a[1],這個時候p-1,p,p+1都可以正常輸出。

C語言易錯點

c語言易錯點 1.每個c語言程式中main函式是有且只有乙個的。2.演算法可以沒有輸入,但必須要有輸出。3.在函式中不可以再定義函式。4.break可用於迴圈結構和switch語句。5.break和continue的區別在於前者是跳出迴圈,後者是結束本次迴圈。6.逗號的運算子的級別最低。7.c語言對...

C語言易錯點

1.c程式的原始檔拓展名為.c 2.include 是c語言的預處理指令之一,所謂預處理,就是在編譯之前做的處理,預處理指令一般以 開頭 3.乙個c程式中一定會有乙個main函式,也只能有乙個main函式。main函式是整個c程式的入口。1.在編譯前先執行 include指令,拷貝stdio.h的內...

C語言易錯點總結

一下分為幾個部分分別加以說明。一 關鍵字 1.什麼是定義?什麼是宣告?兩者有何區別?答 定義是建立乙個物件,並未該物件分配一塊記憶體和取乙個名字,這個名字就是變數名或者物件名 宣告是告訴編譯器這個變數或者物件的記憶體已經存在,這裡只是引用。兩者最重要的區別在於,定義建立了物件並為物件分配了記憶體,而...