指標加1存在的可能及指標的算術運算

2021-09-11 07:22:48 字數 1997 閱讀 8673

指標加1的三種可能:

1.指標加1,加整個陣列(不太現實)

2.指標加1,加乙個單元格(可以,常用)

3.指標加1,加乙個位元組(太麻煩,但考試常出)

舉例:小端:低位址,存放小資料

假如指標加1代表加乙個位元組的話:

乙個單元代表4個位元組,首先將第一行每個單元格擴大四倍得到第二行

int *p = arr;

*p = 10;

p++;

*p = 20;

10的十六進製制 ->0x0000000a

20的十六進製制 ->0x00000014

2的十六進製制 ->0x00000002

將10放到第乙個藍色單元格中,每2個放進乙個格仔,並且低位址存放小資料

所以藍色單元格依次存放:0a 00 00 00

將2放進第二個綠色單元格中,同上

所以綠色單元格依次存放:02 00 00 00

將20放進紅色的單元格中,同上

所以紅色單元格依次存放:14 00 00 00

所以arr[0]十六進製制表示為:0x0000140a,轉換為10進製為5130

所以arr[1]十六進製制表示為:0x00000000,轉換為10進製為0

指標的算術運算:(模擬日期)

1.指標+i:加i個單元格,加isizeof(指標去掉乙個)個位元組

舉例:int *p = (int *)1000;

printf("%d\n",p+1);//1004 ,1004

printf("%d\n",(short *)p+4);//1008, 1008

printf("%d\n",(char *)p+4);//1004, 1004

printf("%d\n",(double *)p+4);//1032, 1032

printf("%d\n",(long *)p+4);//1016 , 1016

printf("%d\n",(char ***)p+4);//1016, 1032

printf("%d\n",(unsigned long long)p+4);//1004,1004

2.指標-i:減i個單元格,減isizeof(指標去掉乙個)個位元組

舉例:int *p = (int *)0x2010;

printf("%x\n",p-2);//2008

printf("%x\n",(short *)p-2);//200c

printf("%x\n",(unsigned long *)p-2);//2008

printf("%x\n",(float *)p-2);//2008

printf("%x\n",(double *)p-2);//2000

printf("%x\n",(int **)p-2);//2008

printf("%x\n",(char *)p-2);//200e

printf("%x\n",(long long)p-2);//200e

3.指標+指標:沒有意義,非法

4.指標-指標:間隔的單元個數(可正可負),1、算出位元組數,2、除以sizeof(指標去掉乙個*)

舉例:int arr[10] = ;//x

int *p = &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",(char ***)q-(char ***)p);//8

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

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

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

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

指標的算術運算

指標可以加上或減去乙個整數的算術運算。首先來看個例子 include int main void short st 3 double pw wa short ps st 0 cout pw 分析上面的程式,我們可以看到,c 一般把陣列名和第乙個元素的位址等價,所以我們可以用上面的兩種方法初始化指標,...

指標的算術運算

指標和陣列 指標和陣列在c語言中有錯綜複雜的聯絡。在前面的課程中,你學會了如何宣告陣列變數 int anarray 5 declare array of 5 integers 關聯陣列實際上是指標,指向陣列的第乙個元素!因為陣列變數 是指標,你可以解析它 它返回 陣列元素0 123 4567 int...

指標的算術運算

指標的算術運算 c語言允許你在指標執行整數的加減運算。如果pnptr指向乙個整數,pnptr 1 pnptr後在記憶體中的位址的下乙個整數。pnptr 1是在pnptr以前的整數字址。請注意,pnptr 1不在pnptr返回位址,但下乙個物件,pnptr分型。如果pnptr指向乙個整數 假設4位元組...