C語言 指標的算術運算

2021-08-17 04:09:14 字數 2968 閱讀 5371

一、指標加法

1、指標+1

(1)加乙個位元組

2的16進製表示:     ox 00000002

20的16進製表示: ox 00000014

ox 0000140a 轉化為十進位制為 5130

(2)加乙個單元格            直接arr[1]=20;

(3)加整個陣列                  沒意義,直接跳出了陣列

綜上指標+1表示加乙個單元格最為合適。

指標加法需要調整(加1加乙個單元格),調整的權重為指標去掉的乙個星號,然後求sizeof

如  int*p ; p+1;            加4位元組 = sizeof (int)

double*p ; p+1;     加8位元組 = sizeof (double) 

char**p ; p+1;        加4位元組 = sizeof(char*)

int*p = (int*)100;

printf("%d\n",p+4);//116

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

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

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

printf("%d\n",(long long)p+4); //104 沒有星號!直接就是數字100+4=104

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

printf("%d\n",(int****)p+4); //116

printf("%d\n",p+4);//116

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

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

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

printf("%d\n",(long long)p+4); //104 沒有星號!直接就是數字100+4=104

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

printf("%d\n",(int****)p+4); //116

2、指標+ 指標   非法

二、指標減法

1、指標減去乙個數字也需要調整,調整的權重同上

int *p = (int*)ox2010;

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

printf("%s\n",(char***)p-2); //2008

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

printf("%s\n",(double**)p-2); //2008

printf("%s\n",(long long*)p-2); //2000

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

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

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

printf("%s\n",(char***)p-2); //2008

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

printf("%s\n",(double**)p-2); //2008

printf("%s\n",(long long*)p-2); //2000

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

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

2、指標 減 指標          

合法 例如:

int *p=arr;

int*q =&arr[5];

q-p  ?

指標減指標表示間隔的單元個數,

分為兩步:1.算出間隔的位元組數(正負)2.除以權重

int arr[10] = ;

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 long)q-(long long)p);//32

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 long)q-(long long)p);//32

C語言 指標的算術運算

ptr 在執行完上述的運算之後,ptr將指向位置 1004,因為 ptr 每增加一次,它都將指向下乙個整數字置,即當前位置往後移 4 位元組。這個運算會在不影響記憶體位置中實際值的情況下,移動指標到下乙個記憶體位置。如果ptr指向乙個位址為 1000 的字元,上面的運算會導致指標指向位置 1001,...

C語言之指標的算術運算

遞增指標 include stdafx.h const int max 3 const 是定義常量具有不可變性 int main 定義整型陣列var int i,ptr 定義整型變數i和指標ptr ptr var 宣告ptr的位址是var for i 0 i遞減指標 include stdafx.h...

每日乾貨丨C語言指標的算術運算

c 指標是乙個用數值表示的位址。因此,您可以對指標執行算術運算。可以對指標進行四種算術運算 ptr 在執行完上述的運算之後,ptr 將指向位置 0x1004,因為 ptr 每增加一次,它都將指向下乙個整數字置,即當前位置往後移 4 位元組。這個運算會在不影響記憶體位置中實際值的情況下,移動指標到下乙...