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.指標 指標,合法,表示間隔的單元個數,需要調整,調整的權重...