運用指針在不用加號的情況進行加法運算的講解
平常我們進行加法運算都是用類似以下的代碼進行運算
#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)鏈接
您可能感興趣的文章
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10APUE筆記之:進程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10深入理解堆排序及其分析
- 01-10深入C/C++浮點數(shù)在內(nèi)存中的存儲方式詳解
- 01-10深入解析Linux下\r\n的問題
- 01-10深入理解數(shù)組指針與指針數(shù)組的區(qū)別
- 01-10基于getline()函數(shù)的深入理解
- 01-10深入理解C/C++混合編程


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)


