操作符下篇(c语言初阶-4)

       再续前缘!对于操作符篇章,我们前面基本都已经涉及过,讲解时重在回顾,不多重复。

目录

1.单目操作符

1.1  逻辑反操作(!)

1.2 取地址操作(&)​

1.3   sizeof

1.31sizeof的使用

 1.32 sizeof返回值

1.33 sizeof与数组

1.4   按位取反(~)

1.5   自增自减(++、--)

1.51前置(++a 、 --a)

1.52后置(a-- 、a++)

1.6   解引用操作符(*)

2. 条件操作符(? :)

例1:求两个数的最大最小值

 例2:求三个数的最大值

 例3:三目操作符的嵌套使用

3.逗号表达式

例1

 例2​

4.下标引用和函数调用

 4.1 下标引用操作符(‘ [ ] ’)

4.2函数调用操作符( ‘()’ )

5.结构体访问操作符

5.1.  (点)‘ . ’ 操作符

例1:

例2

 5.2.  ‘ -> ’(结构体指针) 操作符

例:


1.单目操作符

1.1  逻辑反操作(!)

           对逻辑结果取反,(!真)为假;(!假)为 真


1.2 取地址操作(&)

1.3   sizeof

         sizeof用来计算开辟空间的大小(单位是字节),属于单目操作符,而不是函数

1.31sizeof的使用

         计算类型大小:需要+()

         计算变量大小:可以省略()

       而函数的调用必须要加()用于接收操作数(函数本身就是第一个操作数,要调用就必须+())

 1.32 sizeof返回值

        sizeof的返回值是一个无符号整型(unsigned int/size_t)

        如下:(隐式类型转换会在后面讲到,了解过的可以看一下,小白可过)

1.33 sizeof与数组

        数组的名字在绝大多数情况下都代表着数组首元素的地址,但有两处特殊的情况中代表的是整个数组。

        第一种:(取地址)&+(数组名)arr

        第二种:sizeof(arr)--sizeof中单独出现arr,代表计算的是整个数组开辟空间的大小。

1.34 sizeof与strlen

        sizeof是操作符,也是关键字,用来计算开辟空间的大小。

        strlen是一个字符串操作函数,头文件是 string.h,用来计算字符串的长度,遇到' \0 '停止,且' \0'长度不计

#include<stdio.h>
//sizeof与strlen
int main()
{
	char arr1[] = "abc";'a','b','c','\0'
	char arr2[] = { 'a','b','c' };'a','b','c'......
	printf("%d\n", sizeof(arr1));//'a','b','c','\0'
	printf("%d\n", sizeof(arr2));//'a','b','c'
	printf("%d\n", strlen(arr1));//'a','b','c'('\0'长度不计)
	printf("%d\n", strlen(arr2));'a','b','c'......

	return 0;
	//输出结果是 4 3 3 随机值
	//(本次随机值为15,而15其实是一个随机数)
}

1.4   按位取反(~)

1.5   自增自减(++、--)

1.51前置(++a 、 --a)

1.52后置(a-- 、a++)

1.6   解引用操作符(*)

2. 条件操作符(? :)

        第一个表达式?满足(若第一个表达式逻辑结果为真)执行:不满足(若第一个表达式逻辑结果为假)执行

    条件操作符也是惟一的三目操作符

例1:求两个数的最大最小值

 例2:求三个数的最大值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//条件操作符的使用:求三个数的最大值
int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	int mid = a > b ? a : b;
	int max = mid > c ? mid : c;
	printf("MAX = %d\n", max);
}

 例3:三目操作符的嵌套使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//三目操作符的嵌套使用
//如果分数在90分以上(包括90),成绩为'A';
//如果分数在60分以上(包括60),90分一下,成绩为'B';
//如果分数在60分以上,成绩为'C';
int main()
{
    int score;
    char grade;
    printf("请输入分数>");
    scanf("%d", &score);
    grade = score >= 90 ? 'A' : score >= 60 ? 'B' : 'C';
    printf("%c", grade);
    return 0;
}

3.逗号表达式

         即用逗号隔开的表达式。每个逗号一个表达式。

        如 表达式1,表达式2,3,4,5,6;执行结果从左到右依次执行,但整个大表达式的结果是最后一个小表达式的结果,即最后一个逗号后的表达式结果。

例1

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//逗号表达式
int main()
{
    int a = 4;
    int b = 6;
    int c = (a + 2, b, b * a, a + b);
    //从左到右:6    6    24    10
    printf("%d %d %d\n", a, b, c);
    //注意逗号表达式的优先级是最低的,所以一定要加括号,避免优先级错误。
    //若此处不加(),则就会直接把a+2值赋给c,甚至出现语法错误。
    return 0;
}

 例2

4.下标引用和函数调用

 4.1 下标引用操作符(‘ [ ] ’)

        数组名+索引值(下标),用于数组的下标访问。

4.2函数调用操作符( ‘()’ )

        函数名+(),‘()’内接受操作数,第一个操作数是函数名,剩下的操作数就是传递给函数的实参。

5.结构体访问操作符

5.1.  (点)‘ . ’ 操作符

例1:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//逗号表达式
struct student
{
	char name[20];
	int grade;
	char gender[10];
};
int main()
{
	struct student stu = { {"花骨朵"},{50},{"男"} };
	printf("%s\n%d\n%s\n", stu.name, stu.grade, stu.gender);
   return 0;
}

例2

#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
//结构体成员访问操作符(.)的使用
struct student
{
	char name[20];
	int grade;
	char* gender;
};
int main()
{
	struct student stu;
	struct student* ps = &stu;
	//stu.name =  "花骨朵" ——对字符数组进行赋值时,不可以直接使用'.'操作符
	//可通过使用strcpy字符串操作函数对数组进行赋值。
	//stu.gender=""花骨朵"——可以对字符指针使用'.'操作符
	strcpy(stu.name, "小花骨朵");
	stu.gender = "Big花骨朵";
	stu.grade = 80;
	printf("%s\n%d\n%s\n", stu.name, stu.grade, stu.gender);
	return 0;
}

 5.2.  ‘ -> ’(结构体指针) 操作符

例:

#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
//结构体访问操作符的使用
struct student
{
	char name[20];
	int grade;
	char* gender;
};
int main()
{
	struct student stu;
	struct student* ps = (struct student*)&stu;
	//ps->name="YOU!"——结构体指针访问操作也不可对字符数组进行赋值
	strcpy(ps->name, "会飞的水母");
	ps->grade = 50;
	ps->gender = "会飞的乌龟";
	printf("%s\n%d\n%s\n", ps->name, ps->grade, ps->gender);

   return 0;
}

         因大多数知识均在前面涉及过,所以本篇中具体讲解较少,实例较多,若有不甚解之,可梳理一下自己的已学知识点,也可在评论区讨论哦。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸落之·海

哇塞,我将因此动力加倍!冲冲冲

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值