学C的第四天(各种操作符补充;简单了解多种关键字,define定义常量和宏,结构体)(1)

简介: 10.6:关系操作符:>:大于>=:大于等于<:小于<=:小于等于!=:用于测试“不相等”==:用于测试“相等”

56adbf9e6c124bbb83dd8bbe40e03671.png 10.6:关系操作符:

>:大于

>=:大于等于

<:小于

<=:小于等于

!=:用于测试“不相等”

==:用于测试“相等”

//关系操作符:
#include <stdio.h>
int main()
{
  int input1 = 0;
  int input2 = 0;
  while (scanf("%d %d", &input1, &input2) == 2) //运用scanf方法传参数要加取地址符&,不要老忘记!!!
  {
    if (input1 == input2) //==:等于
    {
      printf("%d 等于 %d\n",input1 ,input2);
    }
    else
    {
      if (input1 > input2)// >:大于
      {
        printf("%d 大于 %d\n", input1, input2);
      }
      else if (input1 < input2)// <: 小于
      {
        printf("%d 小于 %d\n", input1, input2);
      }
    }
  }
  return 0;
}

0667dcd28aa347aab5ad8df81a1c8143.png

10.7:逻辑操作符:

&&:逻辑与(并且),两个操作数都为真,才为真,只要有一个为假,就是假

||:逻辑或(或者),两个操作数只要有一个为真,则为真,两个同时为假,才为假

//逻辑操作符:
#include <stdio.h>
int main()
{
  int a = 0;//默认:0为假
  int b = 1;//    非0为真
  if (a && b)//&&:逻辑与
  {
    printf("两个操作数同时为真");
  }
  else if (a || b)//||:逻辑或
  {
    printf("两个操作数其中一个为真");
  }
  return 0;
}

a7d09158642b426a93d4b26580af48ac.png

10.8:条件操作符(三目操作符):

exp1 ? exp2 : exp3                 根据表达式1的结果来确定是表达式2执行还是表达式3执行(exp:表达式)                                 (exp1)                            (exp2)                 (exp3)


真-->  执行 - 不执行              表达式2(exp2)执行的话,整个表达式的结果就是表达式2的结果


假--> 不执行 - 执行               表达式3(exp3)执行的话,整个表达式的结果就是表达式3的结果


(三目操作符(表达式)-----  恰好有三个表达式)

//条件操作符(三目操作符)
#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d",&a ,&b);
  int m = 0;
  //三目操作符:(逻辑类似下面的if...else...语句)
  // 写法一:
  //(a > b) ? (m = a) : (m = b)
  //  exp1    exp2    exp3
  //写法二:
  m = (a > b ? a : b);
  //表达式2(exp2)执行的话,整个表达式的结果就是表达式2的结果
  //表达式3(exp3)执行的话,整个表达式的结果就是表达式3的结果
  /*if (a > b)
    m = a;
  else
    m = b;*/ //a = b的话,进入else赋值哪个都一样
  printf("%d\n", m);
  return 0;
}

image.png

10.9:逗号表达式:

exp1, exp2, exp3, ...expN     拿逗号隔开的一串表达式(从左向右依次计算)  (exp:表达式)

//逗号表达式:
#include <stdio.h>
int main()
{
  int a = 3;
  int b = 2;
  int c = 5;
  //逗号表达式:exp1, exp2, exp3, ...expN
  //从左向右依次计算
  //逗号表达式的结果时最后一个表达式的结果
  int d = (a+=3, b=5, c=a+b, c-4);
  //    a=a+3=6  b=5 c=6+5=11 c-4=7
  //              最后的结果=7
  printf("%d\n",d);
  return 0;
}

image.png

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

[]        ()        . (后期再学)       ->(后期再学)

*[] -- 下标引用操作符(数组在引用时的一个习惯):

// [] -- 下标引用操作符:
#include <stdio.h>
int main()
{
  int arr[10] = {1,2,3,4,5,6,7,8,9,10};
  //下标:    0 1 2 3 4 5 6 7 8  9 
  printf("%d\n",arr[5]);//取数组中下标为5的值
  // []是一个操作符,有两个操作数:这里一个是arr,一个是5
  return 0;
}


8b8083ae63ae464ca3ca2a548acc5100.png

*() -- 函数调用:

//():函数调用操作符:
#include <stdio.h>
int Add(int x, int y)//这里的括号是语法限定
{
  return x + y;
} 
int main()
{
  int z = Add(3,5);//调用Add()函数,这里的()就是函数调用操作符
           //这里有三个操作数: Add  3 5 
  printf("%\d\n",z);
  printf("hehe");//调用printf()函数,这里的()就是函数调用操作符
           //这里有两个操作数“   printf  "hehe"
  return 0;
}


46aa3bc7c87140f5b5e758a42d5817e8.png

11*关键字:


C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。


11.1--修饰变量的关键字:

auto        --        局部变量自动创建,自动销毁


extern        --        声明外部符号


register        --        寄存器


static        --        "静态"

 *auto:

//关键字:auto
#include <stdio.h>
int main()
{
  auto int num = 0; //局部变量本身都是有auto(自动创建,自动销毁)的,所有干脆都给省略掉了
  //局部的变量是进入作用域创建,出了作用域销毁
  //这里是 自动创建、自动销毁的 -- auto
  return 0;
}

image.png

   *static:

栈区堆区静态区:)


79c61e47cf184c12b1cfdfe2fdf76020.png

在C语言中,static是用来修饰变量和函数的:

1.修饰局部变量        -        称为静态局部变量

(未使用static时:)

//static 修饰局部变量
#include <stdio.h>
void test()
{
  int a = 5;
  a++;
  printf("%d\n",a);
}
int main()
{
  int i = 0;
  while (i < 10)
  {
    test();
    i++;
  }
  return 0;
}


56adbf9e6c124bbb83dd8bbe40e03671.png

(使用static后:变量a变成静态变量,存放在静态区

//static 修饰局部变量
#include <stdio.h>
//本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
//static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束
void test()
{
  static int a = 5;//加上static属性,变成静态变量,程序结束才销毁
  //被static修饰的局部变量 
  //出了作用域后,不再自动销毁,进入作用域也不再自动创建
  //变量a在编译时就已经创建了
  a++;
  printf("%d\n",a);
}
int main()
{
  int i = 0;
  while (i < 10)
  {
    test();
    i++;
  }
  return 0;
}

146de3c6ff784580bdb80b496b521f13.png375985742f7a4efe828b3f8951c9ef9f.png  

相关文章
|
API Apache 数据库
Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架
Flink CDC 于 2023 年 12 月 7 日重磅推出了其全新的 3.0 版本 ~
109792 8
 Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架
|
存储 Dubbo Java
由浅入深Dubbo网络通信深入解析 2
由浅入深Dubbo网络通信深入解析
160 1
|
存储 开发工具 数据库
git的标签管理
git的标签管理
|
Kotlin 索引
Kotlin中循环语句
Kotlin中循环语句
127 2
【数据结构】栈(Stack)的实现 -- 详解
【数据结构】栈(Stack)的实现 -- 详解
|
前端开发 JavaScript
Vue+Swiper实现轮播图效果
Vue+Swiper实现轮播图效果
441 1
|
SQL 关系型数据库 MySQL
【MySQL】事务管理 -- 详解(上)
【MySQL】事务管理 -- 详解(上)
|
JavaScript API
Node.js 回调函数
Node.js 回调函数
90 1
|
人工智能 Unix Linux
【Linux系统编程】基础指令(一)(上)
【Linux系统编程】基础指令(一)
|
Rust 编译器 Go
你真的了解ESM吗?
模块兼容性 推荐阅读指数⭐️⭐️⭐️ ESM是个啥 推荐阅读指数⭐️⭐️⭐️⭐️ 在浏览器中使用ESM 推荐阅读指数⭐️⭐️⭐️⭐️ 模块指定符 推荐阅读指数⭐️⭐️⭐️⭐️⭐️ 默认情况下,模块是defer的 推荐阅读指数⭐️⭐️⭐️⭐️⭐️ 动态导入 推荐阅读指数⭐️⭐️⭐️⭐️⭐️ import.meta 推荐阅读指数⭐️⭐️⭐️⭐️⭐️ 优化建议 推荐阅读指数⭐️⭐️⭐️ 网站中使用ESM 推荐阅读指数⭐️⭐️⭐️
351 0
你真的了解ESM吗?