c语言自学3--初识c语言3

1.单目操作符
1)! 逻辑反操作符

#include <stdio.h>
int main()
{
    int a = 10;
    printf("%d\n", a);
    printf("%d\n", !a);
    return 0;
}  //结果为10 0

因为在c语言中0代表假,非0代表真,10为非零,所以它的反为0.

2)+ 正值
3)- 负值
4)& 取地址符号
5)~ 按位取反

int main()
{
    int a = 0;  //4个字节,32个比特位
    int b = ~a;  //b是有符号的整形
    printf("%d\n", b);  //打印的是这个数的原码
    return 0;

}  //结果为-1

注:原码 反码 补码

正数的这三个码数相同;

负数:补码-1=反码     反码取反为原码

代码推理过程:a=0-->0×32

                                取反 1×32

                                -1     1×31+0

                                取反 1+0×30+1

第一位表示符号,1为负号,0为正号,所以结果是-1。

6)sizeof 计算大小(以字节为单位)
2.前置++,后置++,前置--,后置--

1)前置++

先++,再使用

//结果为a=11 b=11

2)后置++

先使用,再++

int main()
{
    int a = 10;
    int b = a++;
    printf("a=%d\n b=%d\n", a, b);
    return 0;
}  //结果为a=11 b=10

3)前置--

先--,再使用

//结果为 a=9 b=9

4)后置--

先使用,再--

//结果为 a=9 b=10

3.(类型)强制类型转换

int a=(int)3.14;//将double类型强制转换为int类型

4.关系操作符

>        >=        <        <=

!=  用于测试不相等     ==   用于测试相等

5.逻辑操作符

&&  逻辑与(同为真,才为真,得1;有假,则为0.)

|| 逻辑或(有一个为真,则为真,得1.)

注:真为非0,假为0

int main()
{
    int a = 0;
    int b = 10;
    int c = a && b;
    printf("c =%d\n", c);
    return 0;
}  //结果为0

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

exp1 ? exp2 :exp3

exp1为判断条件,真(1),则执行exp2,;假(0),则执行exp3。

7.逗号表达式

用逗号隔开

8.其他

.        ->        &        *

[] 下标引用操作符

() 函数调节操作符

9.常见关键字


auto(自动)        do        for        return        swith        break(跳出循环)        double        goto        short        typeof(类型定义)        case        else        if        signed        union(联合体/共用体)        char        enum        int        sizeof        unsigned(无符号的)        continue        extern (引入外部符号)        long        static(静态的)        void(无/空)        default        float        register        struct(结构体关键字)        rolatile        while

注:关键字不能与变量起冲突

1)auto

int main()
{
    auto int a = 10;
    printf("%d\n", a);
    return 0;
}

int = auto int ,平时auto是省略的,局部变量又称自动变量。

2)register

计算机的储存数据

常识:硬盘(500G/1T)   内存(4G/8G/16G)   高速缓存   寄存器

----->

访问速度越来越快,造价越来越高

int main()

{

        register int a = 10;//建议把a定义为寄存器变量

}

3)signed

int定义的变量是有符号的

signed int

unsigned int 无符号的

4)typedef

类型定义-类型重定义

int main()
{
    typedef unsigned int u_int;
    unsigned int num = 20;
    u_int num2 = 220;
    printf("nmu=%d\n nmu2=%d\n",num , num2);
    return 0;
} //结果为num=20 num=220

5)static

<1>修饰局部变量,使局部变量的生命周期变长

void test()
{
    int a = 1;
    a++;
    printf("a = %d\n", a);
    return 0;
}
int main()
{
    int i = 0;
    while (i < 5)
    {
        test();
        i++;
    }
    return 0;
}  //结果为5个a=2

void test()
{
    static int a = 1;
    a++;
    printf("a = %d\n", a);
    return 0;
}
int main()
{
    int i = 0;
    while (i < 5)
    {
        test();
        i++;
    }
    return 0;
}  //结果为a=2 a=3 a=4 a=5 a=6

原因是第一中情况中的局部变量a在一轮后的生命周期结束,在第二次代码开始时a又变为1;而在第二种情况中a的生命周期被延长,所以a会不断加值,直至i为4时。

<2>修饰全局变量,改变了变量的作用域--让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就无法再使用了。

a.c文件中

int main()
{
    extern int a;
    printf("a=%d\n", a);
    return 0;
}

b.c文件中

int a = 10;

执行a.c文件,结果为a=10.

将b.c文件变为 statc int a = 10;

代码执行失败。

<3>修饰函数,改变了函数的链接属性

a.c文件:

extern int Add(int, int);
int main()
{
    int a = 10;
    int b = 20;
    int sum = Add(a, b);
    printf("sum=%d\n", sum);
    return 0;
}
b.c文件:

int Add(int x, int y)
{
    int z = x + y;
    return z;

a,c执行结果为sum=30;

若将b.c改为

static int Add(int x, int y)
{
    int z = x + y;
    return z;
}

则会报错。

6)define

定义标识符常量

#define MAX 100

定义宏--带参数

#define MAX(x , y) (x>y?x:y) //比较大小

与下面这个意义相同

int MAX(int x , int y)

{

        if (x>y)

                return x;

        else

                return y;

}

10.指针

首先要了解内存是怎么分配地址的。

内存的基本单位是字节,用字节来分格子。

int main()
{
    int a = 10;
    printf("%p\n", &a); //%p打印地址
    return 0;
} // 执行结果为16进制:00000019C78FF634

int main()
{
    int a = 10;
    int* p = &a;  

//有一种变量是用来存放地址的--指针变量,类型为int*
    *p = 20;  // *  解引用操作符
    printf("%d\n", a);
    return 0;
}    //结果为20

注:1)指针所指的是首字节,即是首字节的地址编号。

2)无论是哪种数据类型,指针大小只和操作系统有关。

3)指针的大小在32位平台是4个字节,64位平台上是8个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值