1.對於指標變數,乙個非常中的操作就是要判斷其有效性,即是否為空指標。
如利用動態記憶體申請運算子申請記憶體後,需要首先對記憶體是否申請成功進行判斷。
2. static 再c語言中宣告函式時,該static 函式只具有檔案作用域。及該函式的作用域被限制再宣告它的模組內。
3.變數型別的自動轉換:
當乙個操作符對兩個不同型別的變數進行操作時,低型別變數會自動轉換為高型別變數。當兩個變數僅存在有無符號的差別時,有符號變數自動轉換為無符號變數。
void foo(void)
以上**的執行結果為》6,因為有符號數-20自動轉換為了乙個非常大的無符號數。
4.巨集定義盡量少使用,因為你不知道會在什麼地方犯錯。
#define dps int
*typedef int
* gps;
dps t1,t2;
gps t3,t4;
在上面的這段**中,dps t1,t2;本意為定義兩個整形指標,可是由於紅定義的侷限性(暫且這麼說吧),實際上是定義了乙個整形指標和乙個整形變數。
而typedef 則不具有這個問題。
5. 下面的這段**測試的是什麼問題呢,慣性思維還是懶得思考?
#include
#include <
string
.h>
int main(
int argc,char *argv)
輸出結果為nothing 。
6.關於空指標
c語言中,每種 指標型別都對應這乙個空指標,不同型別的指標對應的空指標的內部表達可能是不想同的。(空指標的內部值不一定是0,不同型別的cpu 對應著不同的空指標內部值,同乙個型別的cpu不同的指標型別對應空指標內部值也可能不想同,別忘了c語言廣泛應用於嵌入式系統)。
c語言中,我們使用0和null表示空指標。實際上再編譯時編譯器將null替換為0,再將0轉換為該型別cpu對應的空指標內部值。
7.函式指標
void fun(void)
;void (
*fp)()
=fun;
cout<
<
*fp<
上述**執行後,我們可以發現*fp與fp的值是相等的,這與其他型別的指標變數是不同的。(函式編譯後是什麼樣的指令形式?)
這也導致了利用函式指標呼叫函式時具有一下兩種不同的形式:
(*fp)()
;fp();
兩者的結果是一樣的。雖然前者看起來更符合指標的定義,但是ansi c也接受後者這種形式。
8.函式fun的宣告可以位於另乙個函式的體內。但是不可以在其體內進行定義。
並且函式fun 可以在其宣告的函式體以外的地方呼叫。 0
給主人留下些什麼吧!~~
C語言程式設計需注意的方面 筆記
一 書寫風格 良好的程式設計風格是提高程式可靠性非常重要的手段,也是大型專案多人合作開發的技術基礎。具體的變成格式每家公司都有規範,但作為乙個初學者養成良好的程式設計風格還是有必要的。1 空行的使用 空行起著分隔程式段落的作用。空行得體 不過多也不過少 將使程式的布局更加清晰。空行不會浪費記憶體,所...
Spring MVC 表單提交中需注意的問題
spring mvc 有用於表單繫結的標籤。但這些標籤最終也會生成標準的 html 頁面。所以,理論上這些標籤是不需要的,只要模擬它們生成的 html 就可以了。spring mvc 的 form 標籤生成的 html 很有規律 元素的 id 屬性對應 modelattribute,input 元素...
在Jni中需注意的記憶體問題
jni中需注意的記憶體問題 以下函式都是需要成對出現的 getstringutfchars releasestringutfchars getstringcritical releasestringcritical getstringregion setstringregion getarrayel...