函式fp 陣列a i 和箭頭符號 的由來

2021-05-24 03:15:29 字數 1011 閱讀 4454

很多事物的由來都是有理由的,現在看似晦澀難解的符號token,背後都是有一段歷史!

1. fp()只是一種簡寫方式

fp()是乙個函式指標,所以*fp就是該指標指向的函式,所以(*fp)()就是呼叫該函式的方式。

也就是 (*fp)() 和 fp() 是同乙個意思;

ansi c 標準規定允許程式設計師將上式簡寫成 fp(),但是要記住,這只是一種簡寫方式罷了!

這樣的話,在檢視定義比較複雜的函式時候,就能容易理解了!比如(*(void(*)()0)()。

2. 陣列a[i]的由來.

首先我們定義乙個陣列,a[i];然後定義乙個指標,當然型別和a[i]型別一致;

進行賦值p = a;這句話的含義就是說,將a[i]的首位址賦值給指標p;

所以就有p是指向陣列a中第0個元素的,那麼p+1就指向陣列a中下標為1的元素;可以這樣寫,

p = p+1;也就是p++;其實也就等同於*(a+1)的元素值,以此類推,*(a+i)就表示指向第i個元素;

這種情況是如此的常用,因此被簡記為a[i],表示對a+i的引用!

實際上,a+i和i+a是乙個意思,因此,a[i] 也就 == i[a];是不是很神奇?!

注:陣列a[i]除了用作運算子sizeof(a)之外,這裡a表示整個陣列的大小;

其他情況,都是表示陣列a中下標為0的元素的指標!

3.箭頭操作符 ->的由來.

首先我們定義乙個結構體,struct complex *cp;很明顯,cp是指向這個結構的指標;

那我們要想獲取這個結構體中的元素,該怎麼辦呢?

首先對指標執行間接操作,獲得結構;然後用點操作符訪問它的成員;

也就是(*cp).a;之所以加括號,是因為操作符優先順序的原因!

這樣寫是如此的繁瑣,於是c語言提供了乙個更為方便的操作符來完成這項工作,也就是箭頭操作符->

它接收兩個引數,左側的引數必須是指向結構的指標!

注:這樣,「.」和「->」這兩個符號的區別就一目了然:

乙個是從結構取元素;乙個是從指向結構的指標取元素.

箭頭函式和普通函式的區別

面試時被問到箭頭函式和普通函式的區別。借用別人的乙個栗子 function make var testfunc make.call testfunc testfunc.call object object可以看到箭頭函式在定義之後,this 就不會發生改變了,無論用什麼樣的方式呼叫它,this 都不...

普通函式和箭頭函式的區別

箭頭函式 let fun 普通函式 function fun 箭頭函式相當於匿名函式,並且簡化了函式定義。箭頭函式有兩種格式,一種只包含乙個表示式,連和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略和return。1 箭頭函式是匿名函式,不能作為建構函式,不能使用new let ...

普通函式和箭頭函式的區別

一 箭頭函式全是匿名函式,普通函式也可以有匿名函式,也可以有具名函式。function a let a function let a 二 箭頭函式不能用於建構函式,不能使用new。三 箭頭函式不繫結this,會捕捉其所在上下文的this指,會作為自己的this值,沒有辦法改變其指向 var obj ...