大家好,今天我们来学习C语言剩下的操作符。
目录
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
单目操作符
单目操作符的种类非常之多:
非逻辑符!
非0为真,0为假,负数也为真
#include<stdio.h>
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<stdio.h>
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<b,所以表达式1为假,返回表达式3,返回b,打印的结果为5。
逗号表达式
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 <stdio.h>
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;
}
今天的分享就到这里,谢谢大家。