您好,登錄后才能下訂單哦!
C語言
C語言是一門面向過程的計算機編程語言,與C++、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易于調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%~20%。因此,C語言可以編寫系統軟件。
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語言中&是什么意思?的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。