char型指標和int型指標,指標變數本身都是佔4個位元組的記憶體空間,可以透過sizeof(char*)或者sizeof(int*)來得到佔用的位元組空間數,存放的都是一個32位的地址值。不同之處在於,char*指標型別和int*指標型別在做算術運算的時候,地址值的變化是不一樣的。例如,
char *ps; //假設ps存放的地址值是0x1000ps++; //ps自增加1,則ps存放的地址值就變為了0x1001,因為char型別是佔一個位元組,//也就是說,ps指向了下一個char型的記憶體地址。int *pn; //如果是int型指標,假設初始也是0x1000pn++; //pn自增加1,則pn存放的地址值就變為了0x1004,因為int型別是佔4個位元組,//也就是說,pn指向了下一個int型的記憶體地址。//從上面可以看出,指標變數之所以有型別,是方便指標變數在進行指標移動的時候,它是按照資料型別所佔用的記憶體空間的位元組數的倍數關係進行移動的,pn=pn+4,則pn移動的位元組數實際上是sizeof(int)*4=4*4=16個位元組數,這樣做,那麼用指標訪問記憶體中的資料就顯得很是方便了,是吧。//還有一點就是,記憶體地址空間一般是按照位元組來編址的,即一個位元組編一個號碼,這個號碼就是這個位元組的地址,這個地址是具有唯一性的。
char型指標和int型指標,指標變數本身都是佔4個位元組的記憶體空間,可以透過sizeof(char*)或者sizeof(int*)來得到佔用的位元組空間數,存放的都是一個32位的地址值。不同之處在於,char*指標型別和int*指標型別在做算術運算的時候,地址值的變化是不一樣的。例如,
char *ps; //假設ps存放的地址值是0x1000ps++; //ps自增加1,則ps存放的地址值就變為了0x1001,因為char型別是佔一個位元組,//也就是說,ps指向了下一個char型的記憶體地址。int *pn; //如果是int型指標,假設初始也是0x1000pn++; //pn自增加1,則pn存放的地址值就變為了0x1004,因為int型別是佔4個位元組,//也就是說,pn指向了下一個int型的記憶體地址。//從上面可以看出,指標變數之所以有型別,是方便指標變數在進行指標移動的時候,它是按照資料型別所佔用的記憶體空間的位元組數的倍數關係進行移動的,pn=pn+4,則pn移動的位元組數實際上是sizeof(int)*4=4*4=16個位元組數,這樣做,那麼用指標訪問記憶體中的資料就顯得很是方便了,是吧。//還有一點就是,記憶體地址空間一般是按照位元組來編址的,即一個位元組編一個號碼,這個號碼就是這個位元組的地址,這個地址是具有唯一性的。