C语言九月十

一、此次学习小结

1.条件操作符(三目操作符)

exp1 ? exp2 : exp3;
判断表达式一是否成立,是就执行2,不成立就执行3
一般将较大值和较小值按照自己的要求放在两个数中
一个if else 语句也可以用三木操作符操作

2.逗号表达式

逗号表达式要注意的点是,如果括号里长串式子,则返回最后一个

如:
int c = (1+2,4+5,6+9),1+2会执行,4+5会执行但是只会返回最后一个值
则c等于15,返回最后一个表达式的值

3.下标引用,函数调用和结构成员

3.1下标引用操作符就是数组的方括号   [ ]

int arr[3] = {1,2,3};
arr[1] = 10;
也可以这样写
2[arr] = 15;
[]表示操作符,操作下标和数组名

3.2函数调用是小括号  ()

小括号就是函数调用操作符
GR();
sizeof()就不是函数,因为他是操作符,因此可以去掉括号操作
sizeof 5;是正确的但是不能求int的大小是不可以去掉括号的

4.结构成员

想要访问结构成员,我们可以用两种操作符

结构体 . 成员名 
结构体指针 -> 成员名 

结构体 . 成员名 
结构体指针 -> 成员名 

struct book {
    int id = 123;
    int price = 55;

};
int main()
{
    struct book book1;
    printf("%d",book1.id);

    struct book* pbook1 = &book1;
    printf("%d",pbook1->id);

}

5.隐式类型转换

C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型 提升

因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长 度。

通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令 中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转 换为int或unsigned int,然后才能送入CPU去执行运算。

char a,b,c...
c= a+b;
先要转化为整型在送到CPU里去运算,结果返回给c,结果将被截断

int main()
{
 char a = 0xb6;
 short b = 0xb600;
 int c = 0xb6000000;
 if(a==0xb6)
 printf("a");
 if(b==0xb600)
 printf("b");
 if(c==0xb6000000)
 printf("c");
 return 0;
}

实例1中的a,b要进行整形提升,但是c不需要整形提升
a,b整形提升之后,变成了负数,所以表达式 a==0xb6 , b==0xb600 的结果是假,但是c不发生整形提升,则表
达式 c==0xb6000000 的结果是真.
所程序输出的结果是:
c


int main()
{
 char c = 1;
 printf("%u\n", sizeof(c));
 printf("%u\n", sizeof(+c));
 printf("%u\n", sizeof(-c));
 return 0;
}

实例2中的,c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字
节.
表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof(c) ,就是1个字节

5.1.2 算术转换

就是

float a = 1.2;

int sum  = a;

会有精度丢失

6.操作符的属性

复杂表达式求值有三个影响的因素。

1. 操作符的优先级

2. 操作符的结合性

3. 是否控制求值顺序

 两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。 操作符优先级

int fun()
{
     static int count = 1;
     return ++count;
}
int main()
{
     int answer;
     answer = fun() - fun() * fun();
     printf( "%d\n", answer);//输出多少?
     return 0;
}

有问题的代码,函数调用不知道是先调用那个
虽然在大多数的编译器上求得结果都是相同的。
但是上述代码 answer = fun() - fun() * fun(); 中我们只能通过操作符的优先级得知:先算乘法,
再算减法。
函数的调用先后顺序无法通过操作符的优先级确定。

二、此次学习收货

感受:此次重点学习了操作符的用法,弥补了之前对操作符的认识,现在对操作符的认识更进一步了,加油,你只管付出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Though even

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值