運(yùn)用指針在不用加號(hào)的情況進(jìn)行加法運(yùn)算的講解
平常我們進(jìn)行加法運(yùn)算都是用類似以下的代碼進(jìn)行運(yùn)算
#include<stdio.h> int main() { int a=2,b=3; printf("%d\n",a+b); return 0; }
其結(jié)果為 5,對(duì)a和b進(jìn)行了加法運(yùn)算
但我們?nèi)绾尾挥眉犹?hào)進(jìn)行加法運(yùn)算呢?先看一段數(shù)組運(yùn)算
#include<stdio.h> int main() { int a[]={1,2}; printf("%d\n",a[0]+a[1]); return 0; }
運(yùn)行結(jié)果是 3 ,它和以下這段代碼是相同的
#include<stdio.h> int main() { int a[]={1,2}; printf("%d\n",*(a+0)+*(a+1)); return 0; }
因?yàn)?a[i]=*(a+i)
接下來我們簡單運(yùn)用一下指針
#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的和計(jì)算,結(jié)果是 5
現(xiàn)在運(yùn)用指針和剛才說的a[i]=*(a+i)和變量存放地址進(jìn)行一下結(jié)合
#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; }
輸出結(jié)果是
1638212 1638208
5
前面兩個(gè)值分別是a和b的地址,因?yàn)槭莍nt類型且在我用的32位編譯器中是按四字節(jié)存儲(chǔ)的,然而char類型是按照一個(gè)字節(jié)一個(gè)字節(jié)存儲(chǔ)的,用指針p指向變量a,先看(char*)a,它是一個(gè)強(qiáng)制類型轉(zhuǎn)換,將a這個(gè)變量強(qiáng)制轉(zhuǎn)換成char*類型的地址,((char*)a)[b]則是將地址向后移b個(gè)字節(jié),但此時(shí)的((char*)a)[b]等于*(a+b),我們知道&和*的作用相互抵消的,所以有了&((char*)a)[b],但此時(shí)它的類型仍為char*,前面的(int)則是將其強(qiáng)制轉(zhuǎn)換位int進(jìn)行輸出。
當(dāng)時(shí)時(shí)候用的long定義的a和b,如果強(qiáng)制類型轉(zhuǎn)換為int,long是八字節(jié),而int是四字節(jié),那么就會(huì)造成數(shù)據(jù)丟失。
最后說一下剛得知的,可以用指針測(cè)試編譯器到底是64位還是32位,64位的編譯器指針變量是8字節(jié),32位的則是4字節(jié)。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- C 語言指針變量的運(yùn)算詳解
- 詳解C++中的成員訪問運(yùn)算符和指針到成員運(yùn)算符
- C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)
- 學(xué)習(xí)二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算的方法
- C語言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問題
- 簡單分析C++指針的操作和運(yùn)算
- Go語言中的指針運(yùn)算實(shí)例分析
- c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算
- 基于指針的數(shù)據(jù)類型與指針運(yùn)算小結(jié)
- 基于C++輸出指針自增(++)運(yùn)算的示例分析
相關(guān)文章
c++ 形狀類Shape(派生出圓類Circle和矩形類Rectangle)
通過C++方式,建立一個(gè)形狀類Shape作為基類,派生出圓類Circle和矩形類Rectangle 求出面積并獲取相關(guān)信息2020-11-11深入解析C++的WNDCLASS結(jié)構(gòu)體及其在Windows中的應(yīng)用
這篇文章主要介紹了C++的WNDCLASS結(jié)構(gòu)體及其在Windows中的應(yīng)用,WNDCLASS被用來定義窗口,文中介紹了其諸多屬性,需要的朋友可以參考下2016-01-01C++實(shí)現(xiàn)判斷一個(gè)字符串是否為UTF8或GBK格式的方法
這篇文章主要介紹了C++實(shí)現(xiàn)判斷一個(gè)字符串是否為UTF8或GBK格式的方法,涉及C++針對(duì)字符編碼的遍歷、判斷、編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11C++中jsoncpp庫和nlohmann-json庫實(shí)現(xiàn)JSON與字符串類型轉(zhuǎn)換
jsoncpp是ROS自帶的一個(gè)JSON庫,它提供了一些函數(shù)來解析和生成JSON數(shù)據(jù),在ROS中,可以使用jsoncpp庫來實(shí)現(xiàn)JSON與字符串類型之間的轉(zhuǎn)換,這篇文章主要介紹了jsoncpp庫和nlohmann-json庫實(shí)現(xiàn)JSON與字符串類型轉(zhuǎn)換,需要的朋友可以參考下2023-08-08