一、指標加法
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*)
2、指標+ 指標 非法int*p = (int*)100;
printf("%d\n",p+4);//116printf("%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",(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
二、指標減法
1、指標減去乙個數字也需要調整,調整的權重同上
2、指標 減 指標int *p = (int*)ox2010;
printf("%s\n",p-2); //2008printf("%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",(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
合法 例如:
int *p=arr;
int*q =&arr[5];
q-p ?
指標減指標表示間隔的單元個數,
分為兩步:1.算出間隔的位元組數(正負)2.除以權重
int arr[10] = ;
int*p=&arr[1]; //x+4int*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*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 位元組。這個運算會在不影響記憶體位置中實際值的情況下,移動指標到下乙...