C语言复习(二)

一、程序结构

1.选择语句

if ... else... 

2.循环语句

while....
for...

二、函数

自定义库函数 & 库函数
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>

Add(int x, int y)
{
    int z = x + y;
    return z;
}
int main()
{
    int num1 = 10;
    int num2 = 20;
    int sum = 0;
    sum = Add(num1, num2);
    printf("sum = %d\n",sum);
    return 0;
}

结果:
C语言复习(二)

三、数组

数组(下标默认从0开始)

arr[10]={0};
int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10}; 
    int i = 0;
    while (i < 10)
    {
        printf("%d ", arr[i]);
        i++;
    }
    return 0;
}

结果:
C语言复习(二)

四、操作符

1.单目操作符

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

sizeof:

int main()
{
    int a = 10;
    int arr[10] = { 0 };
    int sz = 0;
    printf("数组占存储空间 %d 字节\n", sizeof(arr));
    //计算数组元素个数
    sz = sizeof(arr) / sizeof(arr[0]);
    printf("数组元素个数为 %d\n", sz);
    //sizeof 计算的是变量/类型所占空间的大小,单位是字节
    printf("%d\n", sizeof(a));      //OK
    printf("%d\n", sizeof(int));      //OK
    printf("%d\n", sizeof a);       //OK
    //printf("%d\n", sizeof int);   //ERROR
    return 0;
}

结果:
C语言复习(二)

~ :

int main()
{
    int a = 0;//4个字节,32bit
    int b = ~a;//按位取反
    //负数在内存中存储的时候,存储的是二进制的补码,最高位是符号位
    printf("%d\n", b);      //答案是-1!!!
    //printf打印的是原码  补码-1=反码 反码符号位不变,其余位取反=原码
    return 0;
}

结果:
C语言复习(二)

类型强制转换操作符:

int main()
{
    int a = (int)3.14;  //强制类型转换double -> int
    return 0;
}

2.双目操作符

a.算术操作符

+  -   *   /    %(求模运算)

b.移位操作符

左移操作符:左边丢弃,右边补零
右移操作符:右边丢弃,左边补零
int main()
{
    int a = 1;
    int b = a << 2;     //a本身不会移位
    printf("a = %d b = %d\n",a,b);
    return 0;
}

结果:
C语言复习(二)

c.位操作符

&  按位与
|  按位或
^  按位异或:对应的二进制位相同为0,相异为1
int main()
{
    int a = 3;  //011
    int b = 5;  //101
    int c = a&b;
    printf("%d\n", c);  //1
    c = a | b;
    printf("%d\n", c);  //7
    c = a ^ b;
    printf("%d\n", c);  //6
    return 0;
}

结果:
C语言复习(二)

d.赋值操作符

=

e.复合赋值符

+=   -=    &=    *=    /=    |=    %=   ^=   <<=   >>=

f.关系操作符

> >= < <= != ==

g.逻辑操作符

&& - 逻辑与
|| - 逻辑或

3.三目操作符

条件操作符

    exp1 ? exp2 : exp3;

4.逗号表达式

exp1,exp2,exp3,....,expn

5.下标引用、函数调用和结构成员

[] ()  .  ->

五、常见关键字

auto    break    case    char    const    continue    default    do    double    else    
enum        extern    float    for    goto    if    int    long    register    return    short   
signed    unsigned    sizeof    static    struct    switch    typedef    union    void
volatile    while
注:变量名不能和关键字重合

auto:

int main()
{
    auto int a = 10;//局部变量均为自动变量(一般省略)
    return 0;
}

register:

计算机 存储数据

寄存器(register)
高速缓存
内存
硬盘
register int a = 10;//建议把a变量存放在寄存器中

signed:

signed int = int

union:

联合体/共合体

typedef:

类型定义,即类型重定义
eg: typedef unsigned int uint_32;

static:

* static修饰局部变量时,局部变量的生命周期变长
* static修饰全局变量时,改变了变量的作用域 - 让静态的全局变量只能在自己所在的
源文件内部,出了源文件就无法使用了。
* static修饰函数时,改变了函数的链接属性。普通函数具有外部链接属性,被static
修饰的函数只具有内部链接属性。
void test()
{
    static int a = 1;   //a是一个静态的局部变量
    a++;
    printf("a = %d\n", a);
}
int main()
{
    int i = 0;
    while (i < 5)
    {
        test();
        i++;
    }
    return 0;
}

结果:
C语言复习(二)

六、#define

1.#define定义标识符常量

eg:#define MAX 100

2.#define定义宏-带参数

eg:#define MAX(a,b) (a>b?a:b)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章