指標加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位元組...