操作符详解(2)

大家好,今天我们来学习C语言剩下的操作符。

目录

单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

单目操作符

单目操作符的种类非常之多:
操作符详解(2)_第1张图片

非逻辑符!
非0为真,0为假,负数也为真

#include
int main()
{
	int a = 0;
	int b = !a;
	int c = -1;
	int d = !c;
	printf("b=%d,d=%d", b, d);
	return 0;
	}

[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.cQimf.cn/adangu00c82b8ddc440e87bf66ca7b69)3a1e.png#pic_center(ttps://img-blog.csdnimg.cn/ad00c82b8ddc440e87bf66ca7b693a1e.png#pic_center)]
非真为假,默认为0,非假为真默认为1。

取地址符& 解引用操作符*
看到如下代码:

int main()
{
	int a = 10;
	int* pa = &a;
	printf("%d\n", *pa);
	*pa = 2;
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述
这里运用了指针的知识,pa指针里保存了a的地址,*pa里保存的是a的值,当我们改变 *pa保存的值时,a的值也会随之改变,所以后面打印a的值为2。

操作数的类型长度sizeof(以字节为单位)
看到代码:

#include
int main()
{
	char arr[10] = "abc";
	printf("%d\n", sizeof(arr));
	printf("%d\n", strlen(arr));
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof(int));
	
	return 0;
}

在这里插入图片描述

sizeof计算的是字节,字符型的元素每个元素是一个字节,arr数组中有十个元素所以计算出来的结果为10,strlen是计算字符串’\0’前的元素长度,所以打印的结果为3,int整形为四个字节,所以用sizeof操作符操作时计算出来的长度为4,因为sizeof是操作符不是函数所以可以不用带括号,但是语法规定要带括号。

按位取反操作符~
~的作用是对二进制按位取反。要注意的是这里是包括符号位在内全部取反。

int main()
{
	int a = 0;    //a的原码 00000000000000000000000000000000
	int b = ~a;   //b的补码 11111111111111111111111111111111
	              //取反加1 10000000000000000000000000000001得到b的原码,结果为-1
	printf("%d ", b);
}

前置后置++或- -

int main()
{
	int a = 1;
	int c = 1;
	int b = a++;
	int d = ++c;
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);
	printf("%d\n", d);
	return 0;
}

在这里插入图片描述
因为前置++是先进行加1操作在赋值,所以d的结果和c的结果都为2,而前置++是先进行赋值在进行加1操作,所以a的值为2,b的值仍为1。- -和++的逻辑是相同的。

关系操作符

=
<=
!=
==
<

逻辑操作符
&& 且
|| 或

&&操作符:a&&b,如果a与b都为真,表达式才为真
||操作符:a||b,a与b有一个为真,表达式即为真

条件操作符
exp1 ? exp2 : exp3
对语句1判断,为真则语句2,为假则语句3

代码如下:

int main()
{
	int a = 3;
	int b = 5;
	int m = 0;
	m = (a > b ? a : b);
	printf("%d", m);
}

在这里插入图片描述
因为a

逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
	printf("%d\n", c);
}

在这里插入图片描述

因为a>b才为真,a=b+10=12,a=12,b=a+1=13,所以打印的结果为13。

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

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

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

函数调用操作符()
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

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

在这里插入图片描述

看到代码,主函数中test1()调用打印“hehe”,主函数中test2()调用打印“hello”。

访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名

struct Stu
{
	char name[10];
	int age;
	char sex[5];
	double score;
};
int main()
{
struct Stu stu;
struct Stu* pStu = &stu;//结构成员访问
stu.age = 20;//结构成员访问
set_age1(stu);
pStu->age = 20;//结构成员访问
set_age2(pStu);
return 0;
}

今天的分享就到这里,谢谢大家。

你可能感兴趣的:(c语言)