#奇葩论--关于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~

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