【C语言】操作符详解(二) 您所在的位置:网站首页 c语言表达式计算有括号 【C语言】操作符详解(二)

【C语言】操作符详解(二)

2023-05-20 09:47| 来源: 网络整理| 查看: 265

单目操作符 单目操作符的介绍 ! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操作符(解引用操作符) (类型) 强制类型转换

代码演示:

#include int main() { int a = -20; int* p = NULL; printf("%d\n", !2); printf("%d\n", !0); a = -a; p = &a; printf("%d\n", sizeof(a)); printf("%d\n", sizeof(int)); printf("%d\n", sizeof a); //printf("%d\n", sizeof int);//error printf("%p\n", p); return 0; }

image.png 由此可以看出当sizeof计算字符的大小是可以直接在括号里面写声明的类型,也可以不用括号直接在后面写变量名。

sizeof和数组

下面是代码演示: 计算数组的大小

#include void test1(int arr[]) { printf("%d\n", sizeof(arr)); } void test2(char arr[]) { printf("%d\n", sizeof(arr)); } int main() { int arr1[10] = { 0 }; char arr2[10] = { 0 }; printf("%d\n", sizeof(arr1)); printf("%d\n", sizeof(arr2)); test1(arr1); test2(arr2); return 0; }

image.png 为什么test1和test2函数打印的大小都是4呢? 因为传递过去的是一直指针,指针的大小和类型没有任何的关系,只和使用的编译器有关,如果是32位那么输出的就是4个字节,要是64位的输出就是8个字节。

++和–的运算

下面是代码演示:

#include int main() { int a = 3; int b = 4; printf("没有改变前a,b\n"); printf("a=%d b=%d\n", a, b); int c = a++; int d = ++b; printf("改变后的a,b\n"); printf("a=%d b=%d\n", a, b); printf("c=%d d=%d", c, d); return 0; }

image.png 从这里可以看出来:

当++在后面的时候是先赋值后自增;当++在前面的时候是先自增后赋值。

当然–也和++一样的,在这里就不重复举例了。

关系操作符 > 大于 >= 大于等于 printf("呵呵\n"); } if (a == c) { printf("haha\n"); } if (a int i = 0,a=0,b=2,c =3,d=4; i = a++ && ++b && d++; //i = a++||++b||d++; printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d); return 0; }

image.png 结果为什么是这个呢? 因为a++后面跟着一个&&符号当a=0是后面的表达式就不需要计算了;

条件操作符

条件操作符也叫三目操作符 语法:

exp1 ? exp2 : exp3

比较两个数的大小 使用循环的代码如下:

#include int main() { int a = 3; int b = 5; if (a>b) { printf("a=%d", a); } else { printf("b=%d", b); } return 0; }

image.png 我们还有没有更加简单的方法呢?答案是有的只需要一句话就可以解决,那就是条件操作符。 代码如下:

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

image.png 这样可以达到效果,而且代码看起来更加的少。

逗号表达式

语法:

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

代码如下:

#include int main() { int a = 3; int b = 5; int c = (a > b, a++, b--, a + b); printf("c=%d", c); return 0; }

image.png

下标引用、函数调用和结构成员 []下标引用操作符

操作数:数组名和索引值

#include int main() { int arr[10] = { 0 }; for (int i = 0; i printf("haha\n"); } void test1(int arr[], int a) { for (int i = 0; i int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; test(); test1(arr, 10); return 0; }

image.png

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

使用.访问结构体成员

#include struct Sut { char name[10]; int age; char sex[5]; double score; }; int main() { struct Sut s1 = {"汤姆",25,"男",89.5}; struct Sut s2 = { "杰瑞",24,"男",90.5 }; printf("%s %d %s %.1lf\n", s1.name, s1.age, s1.sex, s1.score); printf("%s %d %s %.1lf\n", s2.name, s2.age, s2.sex, s2.score); return 0; }

使用->访问结构体成员 image.png

#include struct Sut { char name[10]; int age; char sex[5]; double score; }; void Print(struct Sut* p) { //printf("%s %d %s %.1lf\n", (*p).name, (*p).age, (*p).sex, (*p).score); printf("%s %d %s %.1lf\n", p->name,p->age,p->sex,p->score); } int main() { struct Sut s1 = { "汤姆",25,"男",89.5 }; struct Sut s2 = { "杰瑞",24,"男",90.5 }; Print(&s1); Print(&s2); return 0; }

image.png 这就是单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式和下标引用表达式、函数调用、结构体成员的详解。希望都帮到大家。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有