6. 单目操作符
6.1 单目操作符介绍
! | 逻辑反操作 |
---|---|
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
– | 前置、后置– |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
例:
#include <stdio.h>
int main()
{
int a = -10;
int* p = NULL;
printf("%d\n", !2);
printf("%d\n", !0);
a = -a;
p = &a;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof a);//这样写行不行?可以,证明了sizeof为操作符,不是函数,函数后面要有括号
printf("%d\n", sizeof int);//这样写行不行?会报错
return 0;
}
~ 对一个数的二进制按位取反
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
练一练:
int main()
{
int a = 10;
a |= (1 << 4);
printf("%d\n", a);//26
a &= (~(1 << 4));
printf("%d\n", a);//10
return 0;
}
6.2 sizeof 和 数组
//x64环境下
#include <stdio.h>
void test1(int arr[])//传的是数组第一个元素的地址
{
printf("%d\n", sizeof(arr));//64位机器,指针大小为8
}
void test2(char ch[])
{
printf("%d\n", sizeof(ch));
}
int main()
{
int arr[10] = { 0 };
char ch[10] = { 0 };
printf("%d\n", sizeof(arr));//40
printf("%d\n", sizeof(ch));//10
test1(arr);//8
test2(ch);//8
return 0;
}