最近在用指標,所以將有關指標的&和*的問題總結一下。
首先介紹一下指標。指標是指指向的位址,指標本身只占有4個位元組,例如:
char *pt,sizeof(pt)=4,不論指標的值是什麼或者它所指向的型別是什麼,它
的空間分配只占有4個位元組,但是sizeof(char *)=1。在這裡補充一下c語言的基
本型別:
(一)32位平台:分為有符號型與無符號型。
有符號型:
short 在記憶體中佔兩個位元組,範圍為-2^15~(2^15-1)
int 在記憶體中佔四個位元組,範圍為-2^31~(2^31-1)
long在記憶體中佔四個位元組,範圍為-2^31~2^31-1
無符號型:(略)
實型變數: 分單精度 float 和雙精度 double 兩種形式:
float:佔四個位元組,提供7~8位有效數字。
double: 佔八個位元組,提供15~16位有效數字。
(二)16位平台:
1)整型(基本型):型別說明符為int,在記憶體中佔2個位元組。
2)短整型:型別說明符為short int或short。所佔位元組和取值範圍均與整型(基本
型)相同。
3)長整型:型別說明符為long int或long,在記憶體中佔4個位元組。
無符號型:型別說明符為unsigned。 無符號型又可與上述三種型別匹配而構成:
各種無符號型別量所佔的記憶體空間位元組數與相應的有符號型別量相同。但由於省
去了符號位,故不能表示負數。
實型變數: 分為單精度(float型)、雙精度(double型)和長雙精度(long
double型)三類。
單精度型佔4個位元組(32位)記憶體空間,其數值範圍為3.4e-38~3.4e+38,只能提
供七位有效數字。
雙精度型佔8 個位元組(64位)記憶體空間,其數值範圍為1.7e-308~1.7e+308,可
提供16位有效數字。
長雙精度型16 個位元組(128位)記憶體空間,可提供18-19位有效數字。
這裡的&是取位址運算子,顧名思義就是得到位址。*書上叫間接運算子。&a
的運算結果是乙個指標,指標的型別是a的型別加個*,指標所指向的型別是a的類
型,指標所指向的位址就是a的位址。*p的運算結果就是p所指向的東西,他的類
型是p指向的型別,它所占用的俄位址是p所指向的位址。
首先,*是指指標的型別(可能說的不對,大家見諒)eg.char *a是指a指標
指向的char型別.其次,&是指位址。eg.&a指的是指向a的位址。
eg.int a=12;//變數a是int型,它的值為12
int *p;//p是指向int型的指標
int **pt;//pt是指向指標的指標
p=&a;//&a是個指標,因為指標是指指向的位址,&a也表示指向的位址。
*p=12;//指變數*p的值為12,p是乙個指標,*p就是乙個變數。
&&a;//指指向指標的指標
pt=&p//&p的結果是個指標,該指標的型別是p的型別加個*,在這裡是int**,
該指標所指向的型別是p的型別,這裡是int*。該指標所指向的位址就是指標p自
己的位址。
*pt=&b;//pt已經是指向指標的指標,其前再加*則會變為指標pt(解釋:按
我個人的理解就是給前面加*則級別會下降,而給前面加&級別會上公升。舉個例子
就是int **a,a即為指向指標的指標,*a則指指標,**a則是指乙個變數;int
b,b是乙個變數,&b則是指乙個指標,&&b則是指向指標的指標。)
c 語言與C語言的區別
c 之類的語言是物件導向的。使用這樣的語言程式設計被稱為物件導向程式設計 object oriented programming,oop。它可以讓計算機程式設計師將乙個物件導向的設計實現稱為乙個可工作的軟體系統 c之類的語言是過程性 procedural 所以程式設計總是面向動作的。在c語言中,程式...
c語言與C 的區別
c語言與c 的區別有很多 1,全新的程式程式思維,c語言是面向過程的,而c 是物件導向的。2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭檔案中 而c 對於大多數的函式都是有整合的很緊密,特別是c語言中沒有的c 中的api是對window系統的大多數api有機的組合,是乙個集體...
C 與C語言的區別
c 語言對c語言的擴充 1 資料的輸入輸出 2 變數的初始化及常量 3 引用及函式間引數的引用傳遞 4 幾種特殊形式的函式 5 命名空間 6 動態記憶體分配 1 資料的輸入輸出 c語言的輸入與輸出 輸入 輸出函式,例如scanf,printf等 標頭檔案 include c 語言的輸入與輸出 將提供...