指標算數運算在陣列中的應用

2021-08-17 16:25:49 字數 1896 閱讀 9285

一、指標算數運算

我們已經了解到,指標加上乙個整數的結果是另乙個指標。但問題是,它指向**呢?如果將乙個字元指標加1,運算結果產生的指標指向記憶體中的下乙個字元。float佔據的記憶體空間不止1個位元組,如果將乙個指向float的指標加1,將會發生什麼,它會不會指向該float值內部的某個位元組呢?

接下來我們通過指標在陣列中的應用進行假設:

請看下面這些宣告:

int arr[10] = ;

int*p = arr;

*p = 10;

p++;

*p = 20;

假設1:指標加1表示加乙個位元組(該假設最終不成立,我下面寫了這麼多是為了具體解釋一下記憶體和變數的關係)

通過上面的宣告我們可以精確的計算出p+1的具體值,倘若假設成立,我們則要對陣列裡的儲存的數值做以下調整,具體調整思路如下:

(1)陣列初始化時,將陣列的前6個元素依次賦值為1,2,3,4,5,6。接下來定義了乙個指標變數p,指向陣列元素的首位址,第3條語句對指標變數p所指向的記憶體中所儲存的值進行重新賦值(即把10儲存在arr[0]中)。

(2)假如我們的假設成立,p+1表示指標加乙個位元組,即指標變數向後移動乙個位元組,起初arr[0]為乙個整型資料,包含了4個位元組,每個位元組包含8個位,即arr[0]佔了32個位,我們將記憶體放大來看,在執行*p=10的操作時,10這個數值儲存在了佔4個位元組,32個位的記憶體位址中,我們將位簡化表示,4個位可以用乙個16進製制數代替,32個位,也就需要8個16進製制數表示,每兩個16進製制數佔乙個位元組。

(3)遵循「低位址儲存低位」的原則,10的16進製制數值為a,因而第乙個格仔裡的資料為0a,其餘位置用0填滿,假設p+1表示指標加乙個位元組,即指標變數向後移動乙個位元組,接下來*p=20這條語句我們按照同樣的方式處理,得到位址為101的框內資料為14(20的16進製制數值),其餘位置繼續用0填滿。當我們對指標變數p解引用時,我們最終的結果便是綠色框裡所有資料所表示的16進製制數(按照低位低位址的儲存原則,重新調整順序為140a),最終計算結果*p=20,arr[0]=5130。

(4)我上邊已經提到過,指標的加法顯然不是這麼回事,因為這樣做沒有任何意義,並且出現的結果讓人難以捉摸。因而假設不成立,要想讓假設「成立」,我們可以參照下面宣告:

#include"stdio.h"

int main()

; int

*p = arr;

*p = 10;

p = (int

*)((char *)p+1);

*p = 20;

printf("*p=%d\n",*p);

printf("arr[0]=%d",arr[0]);

}}

執行結果如下:

假設2:指標加1表示加整個陣列的長度

這種假設毫無意義,因為我們定義使用指標的目的是對陣列進行操作,這樣的加法操作不是計算機語言開發設計者所想看到的,當然也不是我們理想中的指標算數運算。

假設3:指標加法是加陣列的乙個單元格(即指向陣列下乙個單元格)

經過長時間的討論分析,我們最終得到了這個假設。這個假設無論是從指標變數設計的初衷,還是從指標變數的操作來看,都是最實用、最直接的指標算數運算方式。

總結:指標的算數運算在陣列中的操作物件是陣列的單元格,指標加上或是減去乙個數值,本身都需要調整。

調整的方法具體是:調整的權重為指標去掉乙個*號,然後對剩下的資料型別求sizeof。

今天的分享就到這裡,下次我們繼續**各種資料型別的指標進行算術運算的具體規則和基本應用。

冪運算 陣列 快速冪運算在動態規劃中的應用

我們知道動態規劃主要可以用來解決兩類問題 優化問題 組合計數問題 花花今天就來和大家聊一聊在組合計數問題中,如何使用快速冪運算來進行加速,把時間複雜度從o n 降低到o logn 用到的知識點有二進位制和矩陣運算。狀態轉移方程 dp i 0 dp i 1 0 3 dp i 1 1 2 dp i 1 ...

指標在陣列中的應用 !

乙個變數有位址,乙個陣列包含若干個元素,每個陣列元素都在記憶體中占用儲存單元,他們都有響應的位址。既然指標可以指向變數,也就意味著它也可以指向陣列元素,即把某個元素的位址放到乙個指標變數中。所以所謂陣列元素的指標就是陣列元素的位址。定義乙個有10個元素的整形陣列,int a 10 定義乙個指向整形變...

指標中的算數運算

一 指標所佔的位元組 在x86 或者32位平台的指標4佔位元組。在x64 或者64位平台的指標8佔位元組。二 指標加法運算 指標加法運算需要調整,調整的權重是指標本身去掉乙個 號,在求sizeof 例1 int main 三 指標減法運算 指標減法運算需要調整,調整的權重是指標本身去掉乙個 號,在求...