国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

運用指針在不用加號的情況進行加法運算的講解

2020-01-26 13:34:51
字體:
來源:轉載
供稿:網友

平常我們進行加法運算都是用類似以下的代碼進行運算

#include<stdio.h>int main(){ int a=2,b=3; printf("%d/n",a+b); return 0;}

其結果為 5,對a和b進行了加法運算

但我們如何不用加號進行加法運算呢?先看一段數組運算

#include<stdio.h>int main(){ int a[]={1,2}; printf("%d/n",a[0]+a[1]); return 0;}

運行結果是 3 ,它和以下這段代碼是相同的

#include<stdio.h>int main(){ int a[]={1,2}; printf("%d/n",*(a+0)+*(a+1)); return 0;}

因為 a[i]=*(a+i)

接下來我們簡單運用一下指針

#include<stdio.h>int main(){ int a=2,b=3; int *p=a,*q=b; printf("%d/n",*p+*q); return 0;}

p和q分別指向了a和b的地址,將a和b的和計算,結果是 5

現在運用指針和剛才說的a[i]=*(a+i)和變量存放地址進行一下結合

#include<stdio.h>int main(){ int a=2,b=3; int *p; printf("%d/t%d/n",&a,&b); p=&a; printf("%d/n",(int)&((char *)a)[b]); return 0;}

輸出結果是

1638212        1638208
5

前面兩個值分別是a和b的地址,因為是int類型且在我用的32位編譯器中是按四字節存儲的,然而char類型是按照一個字節一個字節存儲的,用指針p指向變量a,先看(char*)a,它是一個強制類型轉換,將a這個變量強制轉換成char*類型的地址,((char*)a)[b]則是將地址向后移b個字節,但此時的((char*)a)[b]等于*(a+b),我們知道&和*的作用相互抵消的,所以有了&((char*)a)[b],但此時它的類型仍為char*,前面的(int)則是將其強制轉換位int進行輸出。

當時時候用的long定義的a和b,如果強制類型轉換為int,long是八字節,而int是四字節,那么就會造成數據丟失。

最后說一下剛得知的,可以用指針測試編譯器到底是64位還是32位,64位的編譯器指針變量是8字節,32位的則是4字節。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 云浮市| 八宿县| 宜川县| 苗栗县| 休宁县| 巴彦淖尔市| 繁昌县| 南投市| 奉贤区| 铜梁县| 高雄市| 三明市| 诏安县| 朝阳市| 鄯善县| 江都市| 德保县| 台前县| 盘山县| 岳阳县| 灌云县| 类乌齐县| 三穗县| 上蔡县| 苏尼特右旗| 河北区| 凤城市| 即墨市| 廉江市| 蒙自县| 囊谦县| 忻州市| 永和县| 准格尔旗| 濮阳县| 顺平县| 营口市| 临洮县| 寿阳县| 沙洋县| 松潘县|