C語言中&是什麼意思?
C語言中&可以作為「位元與」或是「取位址」運算符,位元與運算子也是雙目運算符,其功能是參與運算的兩數各對應的二進位相與,而取位址運算符就是一元運算符,會將運算結果設定為右操作物件的位址。
位元與運算子
#是將二進位數依位元的對應與,得到一個新的二進位數。 1與0為zhi0;1與1為1;0與0為0。
分析如下:
就是二進位的每一位相與。
例如:1010 0011& 0000 1111,結果為0000 0011。也就是與上0相當於把那位數清0,與上1相當於把那位保留。
#取位址運算子
對於c語言中的&運算符,定義:(&p)則是這樣一種運算,返回當時聲明p 時開闢的地址;但是根據我對代碼的觀察,我覺得&運算符不只是返回地址的功能;
例如:
int a = 1; //假设a的地址是0x7dfe88 int *p = (int *)0x7dfe88; int num = 1; int *p1 = #
以上是一段簡單的給指標p,p1賦值的程式碼,0x7dfe88是一段單純的十六進位位址,但是當位址轉指標的時候卻必須加上強轉(int *);如果不加強轉,那麼編譯器就會提出警告( warning C4047: “初始化”:“int *”與“int”的間接級別不同);但是使用&運算符取地址的時候卻不需要加任何強轉就能編譯通過,說明&運算子絕不是的取得位址那麼簡單,「=」賦值運算子的運算順勳是從右向左,說明"="的右邊也是一個指針,所以在此假設&運算子會取出num的位址,並且根據num的型別產生一個暫時的指標。
根據假設,寫出如下程式碼驗證:
int num = 1; double *p1 = #
結果編譯器報“ warning C4133: “初始化”: 從“int *”到“double *”的類型不相容”錯誤。所以我的假設有一定的道理。
推薦教學:《C#》
以上是C語言中&是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!