四、運算子優先順序與結合性
容易出錯的優先順序問題
五、函式指標與指標函式
指標函式——返回值型別為指標的函式
c語言中一般的函式型別為
int fun(int x,int y);
這個函式應該都很熟悉,(x,y)是函式形參,fun為函式名,返回乙個int形資料
int* fun(int x,int y);
上面這個形式值多了乙個*,同樣的(x,y)是函式形參,fun為函式名,返回乙個指向int型的指標變數。
函式指標——指向函式的指標變數
c語言中函式名直接對應於函式生成的指令**在記憶體中的位址,因此函式名可以直接賦給指向函式的指標。呼叫函式實際上等同於「呼叫指令+引數傳遞處理+回歸位置入棧」,本質上最核心的操作是將函式生成的目標**的首位址賦給cpu的pc暫存器。
int( *fun)(int x,int y);
定義fun是乙個指向函式的指標變數,函式返回值為int型資料。*fun兩側的括號不能省略,表示fun先於 * 結合,是指標變數,然後再與後面的()結合,表示此指標指向函式。
區別方法:
a.從右往左找第乙個括號,括號裡面的是函式的形參。
b.括號外面的第乙個識別符號是函式的名字,函式前面的表示函式的返回數值。
六、結構體作為函式引數
可以用結構體變數做實參。但是用結構體變數作實參時,採取的是「值傳遞」的方式,將結構體變數所佔的記憶體單元的內容全部順序遞給形參。形參也必須是同型別的結構體變數。
eg:pint(su); //注在此處su為結構體
這種傳遞方式在空間和時間上開銷較大,如果結構體的規模較大時,對記憶體消耗將會很大。
用指向結構體變數(或陣列)的指標作實參,將結構體變數(或陣列)的位址傳給形參
eg:print(&su); //注在此處su為結構體
七、**執行位置
.對於程式**,已經被燒錄在flash或rom中,我們可以讓cpu直接從其中讀取**執行,但通常這不是乙個好辦法,我們最好在系統啟動後將flash或rom中的目標**拷貝入ram中後再執行以提高取指令速度。
cpu對各種儲存器的訪問速度,基本上是:
cpu內部ram > 外部同步ram > 外部非同步ram > flash/rom
C C 運算子優先順序
c運算子優先順序 運算子及結合性 功能 用法 l 函式呼叫 name expr list 下標 variable expr 成員選擇 object.member 成員選擇 pointer member r 後輟自增 lvalue 後輟自減 lvalue r sizeof 前輟自增 lvalue 前輟...
C C 運算子優先順序
c語言中的運算子 說明 運算子結合性 初等運算子 單目運算子 型別 sizeof 算術運算子 算術運算子 移位運算子 關係運算子 關係運算子 按位與 按位異或 按位或 邏輯與 邏輯或 條件運算子 賦值運算子 逗號運算子 c 語言中的運算子 運算子描述結合性 二元作用域 一元作用域 typeid dy...
C C 運算子優先順序列表
c語言的操作符共有15個優先順序,如下 operators associativity left to right type sizeof right to left left to right left to right left to right left to right left to ri...