
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 單目運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if語句
- C - if...else語句
- C - 巢狀if語句
- C - switch語句
- C - 巢狀switch語句
- C語言中的迴圈
- C - 迴圈
- C - while迴圈
- C - for迴圈
- C - do...while迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break語句
- C - continue語句
- C - goto語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 函式按值傳遞
- C - 函式按引用傳遞
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 可變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指標到指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void指標
- C - 懸空指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或列舉)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位段
- C - Typedef
- C語言中的檔案處理
- C - 輸入與輸出
- C - 檔案I/O(檔案處理)
- C預處理器
- C - 預處理器
- C - Pragmas
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類別
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的單元運算子
雖然C語言中的大多數運算子本質上都是二元的,但也有一些單元運算子。如果一個運算子只需要一個運算元,則稱其為單元運算子,不像二元運算子需要兩個運算元。
C語言中的一些運算子在使用中既是二元的,也是單元的。C語言中單元運算子的示例包括++、--、!等。
C語言中的自增運算子
自增運算子 (++) 將其運算元變數的值加 1,並將其賦值回該變數。
語句a++等效於編寫“a = a + 1”。“++”運算子可以出現在運算元之前或之後,並且它將具有相同的效果。因此,a++等效於++a。
但是,當自增運算子與表示式中的其他運算子一起出現時,其效果並不相同。“字首++”的優先順序高於“字尾++”。因此,“b = a++;”與“b = ++a;”不同。
在前面一種情況下,在遞增之前將“a”賦值給“b”;而在後面一種情況下,遞增是在賦值之前執行的。
C語言中的自減運算子
自減運算子 (--) 從其運算元變數的值中減去 1,並將其賦值回該變數。
語句“a--;”等效於編寫“a = a - 1;”。
“--”運算子可以出現在運算元之前或之後,並且在這兩種情況下,它都將具有相同的效果。因此,“a--”等效於“--a”。
但是,當自減運算子與表示式中的其他運算子一起出現時,其效果並不相同。“字首--”的優先順序高於“字尾--”。因此,“b = a--”與“b = --a”不同。
在前面一種情況下,在遞減之前將“a”賦值給“b”;而在後面一種情況下,遞減是在賦值之前執行的。
C語言中的單目“+”運算子
“+”和“–”運算子眾所周知是二元加法和減法運算子。但是,它們也可以以單元方式使用。當用作單元時,它們被加到運算元變數之前。
當為任何數值變數賦值正值時,“+”運算子隱式存在。語句“int x = 5;”與“int x = +5;”相同。相同邏輯也適用於浮點型和字元型變數。
示例
請檢視以下示例 -
#include <stdio.h> int main(){ char x = 'A'; char y = +x; float a = 1.55; float b = +a; printf ("x: %c y: %c\n", x,y); printf ("a: %f y: %f\n", a,b); return 0; }
輸出
執行此程式碼時,將產生以下輸出 -
x: A y: A a: 1.550000 y: 1.550000
C語言中的單目“−”運算子
通常表示減法運算子的“−”符號在C語言中也充當單目否定運算子。以下程式碼展示瞭如何在C語言中使用單目否定運算子。
示例
在此程式碼中,單目否定運算子返回“x”的負值,並將相同的負值賦值給另一個變數“y”。
#include <stdio.h> int main(){ int x = 5; int y = -x; printf("x: %d y: %d\n", x, y); return 0; }
輸出
執行程式碼並檢查其輸出 -
x: 5 y: -5
C語言中的取地址運算子(&)
我們在C語言中使用&符號作為二元AND運算子。但是,我們也以單元方式使用相同的&符號作為“取地址”運算子。
示例
&運算子返回其變數運算元的記憶體地址。請檢視以下示例 -
#include <stdio.h> int main(){ char x = 'A'; printf ("Address of x: %d\n", &x); return 0; }
輸出
執行程式碼並檢查其輸出 -
Address of x: 6422047
注意:C編譯器在宣告變數時分配一個隨機記憶體地址。因此,每次列印地址時,結果可能會有所不同。
格式說明符%p用於獲取記憶體地址的十六進位制表示形式。
char x = 'A'; printf ("Address of x: %p\n", &x);
這將以十六進位制格式列印“x”的地址 -
Address of x: 000000000061FE1F
變數的地址通常儲存在“指標變數”中。指標變數用“*”字首宣告。在下面的程式碼片段中,“x”是普通的整型變數,而“y”是指標變數。
int x = 10; int *y = &x;
C語言中的解引用運算子(*)
我們通常使用“*”符號作為乘法運算子。但是,它在C語言中也用作“解引用運算子”。
當您想儲存變數的記憶體地址時,應在其字首中使用星號(*)宣告該變數。
int x = 10; int *y = &x;
這裡變數“y”儲存“x”的地址,因此“y”充當“x”的指標。要使用其指標訪問“x”的值,請使用解引用運算子(*)。
示例1
請檢視以下示例 -
#include <stdio.h> int main(){ int x = 10; int *y = &x; printf ("x: %d Address of x: %d\n", x, &x); printf("Value at x with Dereference: %d", *y); return 0; }
輸出
執行程式碼並檢查其輸出 -
x: 10 Address of x: 6422036 Value at x with Dereference: 10
示例2
您還可以使用解引用指標為原始變數賦值 -
#include <stdio.h> int main(){ int x = 10; int *y = &x; printf("x: %d Address of x %d\n", x, &x); *y = 20; printf("x: %d with Dereference: %d", x, *y); return 0; }
輸出
執行程式碼並檢查其輸出 -
x: 10 Address of x: 6422036 x: 20 with dereference: 20
C語言中的邏輯非運算子(!)
C語言中的邏輯非運算子(!)否定布林運算元的值。真變為假,假變為真。邏輯非運算子(!)是單元運算子。
示例1
以下示例顯示瞭如何在C語言中使用邏輯運算子 -
#include <stdio.h> int main(){ int a = 0; int b = 20; if (!(a && b)){ printf("Line 1 - Condition is true\n" ); } return 0; }
輸出
Line 1 - Condition is true
示例2
以下C程式碼在while迴圈中使用NOT運算子 -
#include <stdio.h> int main(){ int i = 0; while (!(i > 5)){ printf("i = %d\n", i); i++; } return 0; }
輸出
在此程式碼中,while迴圈繼續迭代,直到表示式“!(i > 5)”變為False,這將發生在“i”的值大於5時。
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5
C語言中的按位取反運算子(~)
C語言中的按位取反運算子(~)是單元運算子,只需要一個運算元。它具有“翻轉”位的效果,這意味著任何數字的二進位制表示形式中,1將被0替換,反之亦然。
a | ~a |
---|---|
0 | 1 |
1 | 0 |
假設int變數“a”的值為60(在二進位制中相當於0011 1100),則根據其對應位的按位右移,~a操作將得到2的補碼形式的-61。
~ 0011 1100 = 1100 0011
二進位制數“1100 0011”對應於十進制中的-61。
示例
請檢視此示例程式碼 -
#include <stdio.h> int main(){ int a = 60; /* 60 = 0011 1100 */ int c = 0; c = ~a; /* -61 = 1100 0011 */ printf("Value of c is %d \n", c); return 0; }
輸出
執行此程式碼時,將產生以下輸出 -
Value of c is -61