指標加減
對於一段程式
int *p=arr;//指標指向了陣列第一位
*p=10;//將數字10賦值給陣列第一位數
p++;
*p=20;//將數字20賦值進去
在這段程式中「p++」有三種可能 1:給其加整個陣列
2:給其加乙個位元組
3:給其加乙個單元格
分析:1、給其加整個陣列後指標就從初始化陣列的頭部位置直接跳到陣列的末尾,進入不了陣列內部,改變不了陣列的任何乙個值因此無意義。
2、給其加乙個位元組,假設這個陣列共有這10個數,其中1的位址為100以此類推,
根據程式將arr[0]賦值成10
然後增加乙個位元組
此時指標指向的是藍色格仔中的數值將20賦值進去
此時arr[0]==5130 arr[1]==0
因此這種加乙個位元組的方式在改變陣列中的資料總會有其他的資料被覆蓋,不方便操作,無意義。
3、指標加以等同於加乙個單元格,
對於不同的指標型別所對應的「加上乙個單元格「代表加上自己的位元組數
即: int *p 整形指標變數 加乙個單元格 ==加上4個位元組
char*p 字元型指標變數 加乙個單元格 ==加上1個位元組
因此有:指標算術運算
加指標法需要調整(加1等於乙個單元格),調整的權重為指標去掉乙個星號,然後求sizeof
即: int *p; p+1 加4個位元組=sizeof( int )
double*p; p+1 加8個位元組=sizeof( double )
char**p; p+1 加4個位元組=sizeof( char* )
指標-指標—>計算單元個數
方法:1、算數間隔位元組數
2、除以權重
eg:int main()
int arr[10]=;//假設陣列首端位址為x
int *p=&arr[1];//p儲存了arr[1]的位址」x+4「
int *q=&arr[9];//q儲存了arr[9]的位址」x+36「
printf("%d\n",p-q);//-32/4==-8 -32是間隔位元組數 4是權重 );//-
printf("%d\n",(char**)p-(char**)q);//8
printf("%d\n",(long long )p-(long long )q);//注意沒有*的直接處理。
}
指標加減運算 void 的加減
大家都知道對於一般的指標,比如int 等,其加減運算是以元素的大小為單位的。unsigned int s unsigned int 0x1234 cout s 1 endl cout s 1 endl 其結果分別是 0x1238,0x1230 分別加減了乙個unsigned int的大小,也就是4個...
指標加減運算
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.指標 指標,合法,表示間隔的單元個數,需要調整,調整的權重...