本篇继续介绍操作符
)目录
- 6. 单目操作符
- 6.1 单目操作符介绍
- 6.2 sizeof 和 数组
- 6.3 ++ 和 - - 运算符
- 7. 关系操作符
- 8. 逻辑操作符
- 9. 条件操作符
- 10. 逗号表达式
- 11. 下标引用、函数调用和结构成员
- 11.1 下标引用
- 11.2 函数调用
- 11.3 访问一个结构的成员
- 总结
操作符 | 功能 |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
- - | 前置,后置- - |
++ | 前置,后置++ |
* | 间接访问操作符 |
(类型) | 强制类型转换 |
代码演示:
#include
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 a);
printf("%d\n", sizeof(int));
//printf("%d\n", sizeof int);报错
return 0;
}
可以看出
int
型长度为4个字节
代码演示:
#include
int main()
{
int a = -10;
printf("%d\n", sizeof a);
printf("%d\n", sizeof int);//报错
return 0;
}
注意:第七行报错,应输入表达式
printf("%d\n",sizeof(int));
,不带括号时只可以输入单个字符
代码演示:
#include
int main()
{
int a = 0;
int arr[3] = {1,2,3};
char str[] = "hello";
int length=sizeof(arr)/sizeof(int);
int len_a = sizeof(a);
int len_arr = sizeof(arr);
int len_str = sizeof(str);
printf("len_a=%d\n",len_a);
printf("len_arr=%d\n", len_arr);
printf("len_str=%d\n", len_str);
printf("length=%d\n",length);
return 0;
}
运行结果:
可以看出:数组长度=数组占内存空间/单个元素所占空间
前置++和- -
代码演示:
#include
int main()
{
int a = 0;
int x = ++a;
int y = --a;
printf("%d\n",x);
printf("%d\n",y);
return 0;
}
分析:
在int x = ++a;
中,先对a 进行自增,然后使用a,也就是表达式的值是a自增之后的值,同理,int y = --a;
中,a先自减,再使用
后置++和- -
先使用a,再增加。即上例
int x = ++a;
中,先使用 a = 0,再增加 a = 1,即 x = 0 , y = 1
名称 | 功能 |
---|---|
> | |
>= | |
< | |
<= | |
!= | 用于测试“不相等” |
== | 用于测试“相等” |
注意:在编程的过程中== 和=不小心写错,导致的错误
&& 逻辑与
|| 逻辑或
逻辑与:两个值中一个为假,则判断为假
逻辑或:两个值中一个为真,则判断为真
区分逻辑与和按位与
区分逻辑或和按位或
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
exp1 ? exp2 : exp3
代码演示:
#include
int main()
{
int a = 10;
int b = 0;
int c = 0;
if (a > b)
b = 3;
else
b = -3;
c = (a > b ? 3 : -3);
printf("%d %d\n", b, c);
return 0;
}
运行结果:
分析:
exp1 ? exp2 : exp3
如果表达式1为真,那么就计算表达式2,表达式2的结果为整个式子的 结果
如果表达式1为假,那么就计算表达式3,表达式3的结果为整个式子的结果
相比于条件语句条件操作符更简洁
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式
#include
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
printf("%d\n", c);
return 0;
}
分析:逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果
[ ] 下标引用操作符操作数:一个数组名 + 一个索引值
int arr[10];
创建数组
arr[9] =10;
实用下标引用操作符
[ ]的两个操作数是arr和9。
() 函数调用操作符
代码演示:
#include
void test1()
{
printf("haha\n");
}
void test2(const char* str)
{
printf("%s\n", str);
}
int main()
{
test1();
//实用()作为函数调用操作符。
test2("hello world!");
//实用()作为函数调用操作符。
return 0;
}
分析:接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
访问方法:
. 结构体.成员名
-> 结构体指针->成员名
代码演示:
#include
//学生
struct Stu
{
//成员
char name[20];
int age;
char sex[10];
char tele[12];
};
void print(struct Stu* ps)
{
printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
//->
//结构体指针变量->成员名
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);
}
int main()
{
struct Stu s = {"zhangsan", 20, "nan", "15596668862"};
//结构体对象.成员名
printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);
print(&s);
return 0;
}
这两期关于操作符的介绍就到此结束了,有什么错误评论指出万分感谢!!最后,如果这篇文章对你有帮助,就三连一下吧,谢谢支持。