操作符详解三四

  • &取地址和*解引用操作符


    a 在内存中四个字节,一定会开辟空间,里面要存放10
    内存会开辟空间
    空间会划分一个一个小的内存单元
    每个内存单元都有自己的编号
    编号被称为内存单元的 地址
    int a =10;
    printf("%p",&a);打印a的地址

    打印地址%p
    地址是个十六进制的数字,其实是二进制
    00cff9d4
    地址存起来:放到pa里去

    pa是用来存放内存单元的地址---pa就是一个指针变量
    int pa = &a pa的类型
    *说明pa是个指针变量
    pa指向的对象是a
    a的类型是int
    所以这也是int
    未来pa的类型由指向对象的类型决定
    怎么通过指针变量来找到a
    我们用 *pa;//这个被称为解引用操作符 -间接访问操作符
    *pa就是a
    *pa = 20
    a就变成20了不再是10
  • (类型) 强制类型转换
    int a =3.14;
    int a = (int)3.14
    把3.14强制转换成int类型
    这个时候没有警告
  • 再讲sizeof易错类型题
    24
    ​数组传参传的是什么呢

    ​是数组首元素的地址

    整形的地址传过去本质是一个指针
    因为首元素的地址传过来,地址应该放到指针变量内去
    所以这个arr 应该是int*arr
    arr是个指针
    这里的sizeof(arr)算的是一个指针变量的 大小
    在32位平台下是4,64 -8
    对于 (4),传的是char类型的地址
    传的是一个char* arr的指针
    同学们注意,指针变量是用来存放地址的

    这个ch也是用来存放地址的
    她的大小也是一个指针变量的大小
    他也是四个或八个字节


    ​char类型指针大小是1笑死我
    指针大小无论类型
    指针变量都用来存放地址
    而地址大小是固定的,地址总是32个二进制序列或者64个二进制序列
    所以指针变量不管什么类型都是那么大
  • 关系操作符就是判断大小

    • if(a == b)
    • 比较两个字符串相等 不能使用==
  • 逻辑操作符(只看真假)
    • 并且和或
    • 逻辑语只看真假
    • 做一道题


      短路原理::::::哈哈哈说得好
      12 3 4有手就行
      int c = a && b;
      &&遇到一个为假就结束
      留一手左边确定为假时,右边就不用算了
      第二道2234
      ||遇到一个为真就停止
  • 条件操作符(三目操作符)唯一一个
    • b = (a > 5? 1:-1);


      max = (a>b? a : b);
      如果表达式1为真,表达式2要计算,表达式三不计算
      如果表达式...
  • 逗号标识符
    • 逗号表达式:要从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果
    • 会计算表达式

    • 例子:
      if( , , , ,)
    • 例子:学到业务处理

  • C语言上多久:三十节课 * 3 =90
    磨刀不误
    学C语言是在锻炼编程思维和代码能力
  • 下标引用,函数调用,和结构成员
  • 下标引用操作符[]
    • int arr[10 ] = {1,2,3,4,56,,78,};
      pritntf(%d,arr[4]);下标引用操作符
      []她的操作数是谁?
      是两个 arr 4

  • 函数调用操作符
    • int a = 10;
    • int b = 20;
    • int ret = Add(a,b);
    • 函数的定义和函数的调用


      Add(a,b);这个()叫函数调用操作符
      函数无参void test()
      {}
      test()
      依然要有()
      Add(a,b) ()的操作数有三个Add x y
      test()只有一个函数名操作数
  • 结构成员访问操作符

    • c语言中有个东西叫结构体
      int flaot char
      我们描述一本书书名,出版社,作者
      人:人名,性格,年龄
       
    • 结构体struct Book


      strucut book
      {
      char name[20];
      cahr id[20]'
      int price;
      }
      创建一个自定义类型
      b.name
      .操作符
      b是结构体变量名.成员名
      第二种方法
      :我们直接如果要把b的成员打印出来了
      但我们不这样做,我们用地址
      &b;b是一个结构体变量,可以取地址,因为他在内存里一定有自己的空间
      我们把她地址放到pb中去 pb = &b;
      pb是个指针 pb指向结构体,是个结构体指针
      通过pb访问b

      第三种写法pb是个指针pb->name
      pb指向对象的name
      这是第三种写法
      结构体指针->成员名
      pb->name
  • 表达式求值(操作符放在表达式中使用)


    int c = a+b*7
    乘法优先级大于加法所以先乘再加
    • 隐式类型转换

      • 整形提升介绍


        例子:char a,b,c
        a = b +c ;
        b +c的表达结果要放到a去
        但是char的大小没有达到整形的大小
        使用首先把b和c的值提升为普通整形,
        但是提升之后b+c变成四个字节, 放到a里放不下,会发生截断,再储存到a里去
        什么叫截断,你是四个字节的数据,你要放到一个字节的数据里
        我们只保留最低的一个字节内容,剩下三个字节扔掉

      • 整形提升的意义


        不管short 还是char都换成int 不升白不升
      • 题目


        真不会做
        发现a和b都是char类型,都没有达到int的大小
        这里就会发生整形提升
        -126
        10000010 - c
        c要打印%d
        也要整形提升
        10000010要整形提升
        结果是111111111111111110000010
        但是我们在内存中放的是补码
        前面正数的原反补都相同,无所谓
        打印求它的原码
        内存是补码
        100000000000000111110
        梳理一遍
      • 题目


        选c
        题目中char要进行整形提升
      • 题目


        1 4 4
        c只要参与计算,就要整形提升
        ​float不需要整形提升,只有char和short四个字节
        大与等于4字节的就不用整形提升
      • 讲解


        任何一个表达式都有两个属性

        short s = 5;
        类型属性可以推倒出来,显而易见
        为什么是4,cpu的寄存器的长度一般是int


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值