指標的「加 減」 運算,指標儲存(c語言)

2021-08-18 11:57:18 字數 3284 閱讀 2287

int a=10;        //定義乙個整型變數a,並將10賦值給a;

int *p=&a;      //定義乙個整型指標變數p,並將a的位址賦值給p;

p=(int *)1000;  //將

(int)

1000強轉為整型指標(int *),並賦值給p;

在c語言中,記憶體可以理解為乙個字元陣列,基本單位是位元組,每個位元組包含乙個位址,而位址是由cpu的位址匯流排位數決定的,所有的位址一般稱為位址空間,比如32位的cpu,位址匯流排的位數是32位,它可以描述位址空間為0x0000 0000 0000 0000~(2^32-1),又因為1(位元組)=8(位),所以32位的系統(還和編譯器有關,編譯器是32位),指標變數佔4個位元組。(64位編譯器,指標變數佔8個位元組)

int arr[8]=;   //定義乙個整型一維陣列arr,並賦值;

int *p1=arr;   //定義整型指標變數p1,指向arr[0](儲存arr[0]的位址)

此時p1是加乙個位元組?乙個格仔(4個格仔)?

假設:p1++是加乙個位元組; 令

:p1=3;  //p1++執行後執行

此時,arr[0]==?

顯然,如果這樣移動,指標將變得極其複雜,還會引起資料混亂,所以

假設不成立!

若p1++是乙個格仔:

:p1=3;  //p1++執行後執行

此時,arr[1]==3;

結果成立!

同理得:

int arr[10] = ;

int *ip = arr;

ip++;//加乙個整型單元格,4位元組

short brr[10] = ;

short *sp = brr;

sp++;//加乙個short單元格,2位元組

double crr[3] = ;

double *dp = crr;//brr

dp++;//加乙個單元格,8位元組

int main()

(常用於兩個指標指向同乙個陣列)

int main()

; int *p = &arr[1];//a[0]的位址若為x,則&arr[1]==x+4

int *q = &arr[9];//x+36

printf("%d\n",p-q);//-8

printf("%d\n",q-p);//8

printf("%d\n",(short *)q-(short *)p);//16

printf("%d\n",(long *)q-(long *)p);//8

printf("%d\n",(float *)q-(float *)p);//8

printf("%d\n",(long long **)q-(long long **)p);//8

printf("%d\n",(double *)q-(double *)p);//4

printf("%d\n",(char *)q-(char *)p);//32

printf("%d\n",(long )q-(long)p);//32

return 0;

}

int main()

; int *p = &arr[1];//a[0]的位址若為x,則&arr[1]==x+4

int *q = &arr[9];//x+36

printf("%d\n",p-q);//-8

printf("%d\n",q-p);//8

printf("%d\n",(short *)q-(short *)p);//16

printf("%d\n",(long *)q-(long *)p);//8

printf("%d\n",(float *)q-(float *)p);//8

printf("%d\n",(long long **)q-(long long **)p);//8

printf("%d\n",(double *)q-(double *)p);//4

printf("%d\n",(char *)q-(char *)p);//32

printf("%d\n",(long )q-(long)p);//32

return 0;

}

1、指標+、- 數字:指標需要調整的權重為 sizeof(指標去掉乙個*),結果還是指標;

2、指標 + 指標:

非法!3、指標 - 指標 :合法,結果不是指標!表示間隔的單元個數,需要調整的權重為sizeof(指標去掉乙個*)

指標-指標,分兩步:(1)算出間隔位元組數;(2)除以調整的權重。

C語言指標與指標之間的加減運算

知識點 1 指標和指標可以做減法操作,但不適合做加法運算 2 指標和指標做減法適用的場合 兩個指標都指向同乙個陣列,相減結果為兩個指標之間的元素數目,而不是兩個指標之間相差的位元組數。比如 int int array 4 int p int1 int array 0 int p int2 int a...

指標加減運算

include include 字元陣列 指標是4位元組 指標 指標 錯誤 指標之間相加無限大,記憶體崩潰,所以指標 指標是不可能 指標 指標 得到之間間隔的單元個數。1 算出間隔的位元組數,2 除以調整的權重 int main x 可以設arr的起始位址是x int p arr 1 x 4 指標是...

C語言 指標的加減

1.指標 數字 指標加法需要調整,調整的權重為sizeof 指標去掉乙個 include int main 2.指標 數字 指標減法需要調整,調整的權重為sizeof 指標去掉乙個 include int main 3.指標 指標,非法 4.指標 指標,合法,表示間隔的單元個數,需要調整,調整的權重...