C语言复习(2)

1、短路

表达式1 && 表达式2:当表达式1为假时,整个式子肯定为假,编译器将不会计算表达式2.

表达式1 || 表达式2:当表达式1为真时,整个式子肯定为真,编译器将不会计算表达式2.

分析:当程序执行带if语句中,先执行++a,此时a的值为1,不能判断1&&(++b)这个表达式的值,所以进行++b,b的值加到1,此时(++a && ++b)这个表达式的值确定为真,故不进行后面的操作,c的值不发生变化,之后进行if语句中花括号之中的内容,a,b,c的值依次加1,故a的值为2,b的值为2,c的值为1.

2、

int main()
{

    int a = 10;
    a = !!a;
    printf("%d",a);   //a的值为1
}

3、非0为真,0为假

4、位运算:一个整数为4字节

结果:

分析:由于一个整数包含四个字节,将十六进制的76左移8位后,它将进入左移到下一个8位中,此时它再和12进行按位或,最右边的8位由全是0变为12的二进制。故结果为7812.

分析:char的范围为-127至128,197超出了它的范围,故a存储的是197的补码形式,为-59(快捷方法:197+59=256),b存储的也是它的补码形式,故为-1,c在char的存储范围内,故能直接存储。

    unsigned char的范围为0~256,故e,f能直接存储,但-1超出范围,存储的是补码255.

5、类型转换:默认转换窄变宽

6、前缀++:操作数的值被增加,而表达式的值就是操作数增加后的值。

     后缀++:操作数的值被增加,而表达式的值就是操作数增加前的值。

分析:多数编译器printf参数都采用从右往左压栈,所以先计算后面的p[i++],操作数i的值被增加到2,p[2]的值即为3,此时再计算第一个p[i++]的值,i从2通过自加后面为3,p[3]的值即为4.

7、switch:从哪儿进,从哪出

(1)、从哪进:表达式的值与case后的值相同则进入,case顺序不影响结果

(2)、从哪出:遇到break或整个switch结束(break以前是为了灵活,现在是累赘)

(3)case与if语句的不同:

If语句中若判断为真则只执行这个判断后的语句,执行完就跳出if语句,不会执行其他if语句;

而switch语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有case语句。

在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

8、数组和指针:

(1)数组

  数组名arr表示整个数组:
     1.在定义数组的同一个函数中,求sizeof(arr),
     2.在定义数组的同一个函数中,&arr+1
  数组注意事项:
     1.越界
     2.数组作为参数传递,还需要长度
  字符数组
     1.以'\0'结尾

(2)指针

     指针大小:win32,x86,32位平台为4字节;x64,64位平台为8字节
指针和数组的不同
     1.大小不同
     2.指针可以++,数组名不能动
     3.访问方式不同

在int arr[10];    p = arr;条件下,p[i] == *(p+i);  p[-1] == *(p-1)*(arr+i) == arr[i];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值