#奇葩論--關於C語言中的僅用"[]"運算符實現加法運算

 ## 奇葩論--關於C語言中的僅用"[]"運算符實現加法運算 ##

在C語言世界中,大家對這個“[]”運算符並不陌生,因爲我們經常在使用數組時需要用到它,但今天我向大家介紹的並不是它普通地在數組中的使用,而是用它實現像’+’運算符那樣進行加法運算。好了,說了那麼久,我們先來看看它’[]’在數組中的使用吧~~~
這裏寫圖片描述
這裏寫圖片描述
很顯然,只要學過C語言的小夥伴們都能知道該’[]’運算符在數組中的作用。
但我們如果要想知道’[]’運算符是如何如同’+’運算符一樣實現加法功能運算的,那我們要先來看看’[]’的原理。
在C語言中,我們知道a[b]是等價於*(a+b)的,但除了這個等價外,它還有許多其他不同的等價。。如下圖: ##3.(2)##
3.(2)
除此之外,該”[]”運算符重要的一點就是:
a[b] = * ((type * )a+b) = *(a+b *sizeof(type))
type爲數據類型:如int,float,double,char and so on…
在此之中,32位計算機中,int類型爲4字節,double類型爲8字節,char類型爲1字節。因此,若要實現”[]”運算符的加法功能,就需要用到char類型了。。
不說辣麼多了,敲敲代碼體現一下~
哦~對了~忘說一個東西了,那就是指針運算符*與取地址運算符&相遇時,二者就會如同戀人般私奔,將它們攜帶的數據丟了下來,因此我們還需要用到”&”運算符。。。
源代碼如下:
這裏寫圖片描述
這裏寫圖片描述
很明顯,源代碼實現了’[]’運算符如同’+’運算符一樣的功能。。
原理:
首先我們要將x強制類型轉換成char * ,因爲char爲一字節,當x移動y單位時,只移動了y個字節;但如果不強制類型轉換的話,當x移動y個單位時,就移動了y * 4個字節(因爲int類型爲4字節),所以我們首先要強制類型轉化成char類型。
x[y] => ((char *)x)[y];
隨後,用&將*抵消後,就能得到我們想要的結果了;
((char * )x)[y] => &((char *)x)[y];

今天要介紹的內容就是這些,其實當我學到這個時,我也是大喫一驚,沒想到”[]”的用法居然還能實現加法運算,最讓我感到神奇的就是(char *)這個奇葩的東西,感到特別有趣。。
今天就介紹到此,see you next time~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章