目錄
! --- 邏輯反操作
& --- 取地址操作符
* --- 間接訪問操作符(解引用操作符)
sizeof --- 操作數的類型長度(單位為字節)
~ --- 對一個數的補碼二進制按位取反
前置++和前置--
后置++和后置--
(類型) --- 強制類型轉換
! --- 邏輯反操作
把假變為真,把真變為假
代碼演示:
#include<stdio.h>
int main()
{int flag = 0;if (flag)printf("execute flag\n");//邏輯反操作if (!flag)printf("execute !flag\n");return 0;
}
在C語言中,0為假,一切非0為真,所以將flag單獨放在if判斷語句內,是不會進入if語句中的,但是當前面加一個邏輯反操作,就會將假變為真,則會執行第二條if語句中的內容
代碼驗證:
& --- 取地址操作符
* --- 間接訪問操作符(解引用操作符)
區分與按位與操作符,按位與操作符屬于雙目操作符
代碼演示:
#include<stdio.h>
int main()
{int a = 10;printf("a原來的值 = %d\n", a);//取地址操作符取出a的地址,用同類型的指針變量接收int* pa = &a;//解引用操作符,將pa解引用,//通過pa存放的地址,找到指向的空間內容,并賦值為20//也就是將變量a的值重新賦值為20*pa = 20;printf("a通過指針變量改變的值 = %d\n", a);return 0;
}
代碼驗證:
sizeof --- 操作數的類型長度(單位為字節)
sizeof不是函數,是操作符
sizeof計算的是類型創建變量的大小,單位是字節
代碼演示:
#include<stdio.h>
int main()
{int a = 10;printf("%d\n", sizeof(int));printf("%d\n", sizeof(a));printf("%d\n", sizeof a );return 0;
}
代碼驗證:
由最后一條代碼可證明sizeof不是函數,因為可以把括號去掉,同樣計算出a所占空間的字節,但函數不能去掉括號
sizeof和數組名的相關知識請見:對于數組名的理解-CSDN博客
~ --- 對一個數的補碼二進制按位取反
代碼演示:
#include<stdio.h>
int main()
{int a = 0;int b = ~a;printf("b = %d", b);return 0;
}
那么b的值為多少呢?
代碼解析:
整數0存儲在int類型變量a中的補碼:
變量a按位取反后的補碼:
存儲至變量b中的原碼:
由此可得b的值為-1
代碼驗證:
前置++和前置--
先++(或--),再使用
代碼演示:
#include<stdio.h>
int main()
{int a = 1;int b = ++a;printf("a = %d; b = %d\n", a, b);return 0;
}
變量a先自增1,變為2,再賦值給變量b,所以打印出來a為2,b為2
代碼驗證:
前置--同理
后置++和后置--
先使用,后++(或--)
代碼演示:
#include<stdio.h>
int main()
{int a = 1;int b = a++;printf("a = %d; b = %d\n", a, b);return 0;
}
先將a原來的值賦值給b,b就為1,賦值后a自增1,a就為2
代碼驗證:
后置--同理?
(類型) --- 強制類型轉換
#include<stdio.h>
int main()
{int a = (int)3.14;printf("a = %d\n", a);//a = 3return 0;
}
將3.14這個小數強制類型轉換為int類型,并且存儲到變量a中,那么a的值就為3,直接舍去小數
常規用法:
?一般用于動態開辟內存時才強制類型轉換為相對應的類型
#include<stdio.h>
#include<stdlib.h>int main()
{//開辟20個字節的動態空間int* ptr = (int*)malloc(sizeof(int) * 5);return 0;
}