C语言学习入门之操作符详解(下)

本篇继续介绍操作符

目录

  • 6. 单目操作符
    • 6.1 单目操作符介绍
    • 6.2 sizeof 和 数组
    • 6.3 ++ 和 - - 运算符
  • 7. 关系操作符
  • 8. 逻辑操作符
  • 9. 条件操作符
  • 10. 逗号表达式
  • 11. 下标引用、函数调用和结构成员
    • 11.1 下标引用
    • 11.2 函数调用
    • 11.3 访问一个结构的成员
  • 总结
)

6. 单目操作符

6.1 单目操作符介绍

操作符 功能
! 逻辑反操作
- 负值
+ 正值
& 取地址
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;
}

运行结果:
C语言学习入门之操作符详解(下)_第1张图片

可以看出int型长度为4个字节

代码演示:

#include
int main()
{
	int a = -10;
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof int);//报错
	return 0;
}

C语言学习入门之操作符详解(下)_第2张图片

注意:第七行报错,应输入表达式printf("%d\n",sizeof(int));,不带括号时只可以输入单个字符

6.2 sizeof 和 数组

代码演示:


#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;
}

运行结果:

在这里插入图片描述

可以看出:数组长度=数组占内存空间/单个元素所占空间

6.3 ++ 和 - - 运算符

前置++和- -

代码演示:

#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

7. 关系操作符

名称 功能
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”

注意:在编程的过程中== 和=不小心写错,导致的错误

8. 逻辑操作符

&& 逻辑与
|| 逻辑或
逻辑与:两个值中一个为假,则判断为假
逻辑或:两个值中一个为真,则判断为真

区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0
1&&2---->1
1|2----->3
1||2---->1

9. 条件操作符

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的结果为整个式子的结果
相比于条件语句条件操作符更简洁

10. 逗号表达式

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;
}

运行结果:C语言学习入门之操作符详解(下)_第3张图片

分析:逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果

11. 下标引用、函数调用和结构成员

11.1 下标引用

[ ] 下标引用操作符操作数:一个数组名 + 一个索引值

int arr[10]; 创建数组
arr[9] =10; 实用下标引用操作符
[ ]的两个操作数是arr和9。

11.2 函数调用

() 函数调用操作符

代码演示:

#include 
void test1() 
{ 
	printf("haha\n");
} 
void test2(const char* str) 
{
	printf("%s\n", str); 
}
int main()
{ 
	test1();
	//实用()作为函数调用操作符。 
	test2("hello world!");
	//实用()作为函数调用操作符。 
	return 0;
}

运行结果:
在这里插入图片描述

分析:接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

11.3 访问一个结构的成员

访问方法:

. 结构体.成员名
-> 结构体指针->成员名

代码演示:

#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;
}

运行结果:在这里插入图片描述

总结

这两期关于操作符的介绍就到此结束了,有什么错误评论指出万分感谢!!最后,如果这篇文章对你有帮助,就三连一下吧,谢谢支持。

你可能感兴趣的:(C语言从入门到进阶,c语言,visual,studio,code,开发语言,学习,经验分享)