雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊:

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

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

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

但我們?nèi)绾尾挥眉犹栠M行加法運算呢?先看一段數(shù)組運算

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

運行結(jié)果是 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的和計算,結(jié)果是 5

現(xiàn)在運用指針和剛才說的a[i]=*(a+i)和變量存放地址進行一下結(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

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

當時時候用的long定義的a和b,如果強制類型轉(zhuǎn)換為int,long是八字節(jié),而int是四字節(jié),那么就會造成數(shù)據(jù)丟失。

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

總結(jié)

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

上一篇:Opencv處理圖像之輪廓提取

欄    目:C語言

下一篇:opencv利用霍夫變換檢測直線進行圖片校正

本文標題:運用指針在不用加號的情況進行加法運算的講解

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/542.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有