飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2710|回复: 1

[C/C++] C语言--学习笔记--第二课

[复制链接]
  • TA的每日心情

    2019-4-15 08:38
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-4-30 12:45:38 | 显示全部楼层 |阅读模式
    本帖最后由 TOM 于 2017-4-30 13:21 编辑

    这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲而已;后来发现根据课程的讲解做做笔记可以加深不少印象);记录的内容和顺序大致和课程相同,也有一些自己的注解和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套C语言的课后作业,好像还没有人发布过笔记,就发出来仅供参考!
    [C] 纯文本查看 复制代码
    格式化输出
    
    main()
    {
            int i = 1;
            int j = 1;
            int k = 0;
            k = i + j;
    
            printf("%d",k);
    }
    
    
    CPU只有要有两部分构成,一个是CPU内部的存贮,一个是加法器
    
    变量等价于里面的数据(要看好申请时的类型,决定变量的长度)
    
    下面将的scanf();
    
    scanf("%d %d",&i,&j);
    
    讲大概是一个内存单元的最多存放多大的数
    
    1 个字节最多存贮255
    
    每个字节有8位构成。
    
    0000-0000
    1111-1111
    
    一个字节里面最高位是符号位
    
    0111-1111
    1111-1111
    
    (char)一个字节最多存放数据
    -128~127
    
    (int)两个字节最多存放的数据
    -32768~32767
    
    unsigned char 无符号数
    unsigned char
    
    内存单元里存放的数据是一样的E3,但是CPU会根据不同的输入形式,给出不同的解释
    
    char u = 0xe3  两种表现形式一种是277,另一种是-29. 如果没有做强转,那么申请内存时定义的是什么类型,输出时就是什么类型。
    main()
    {
            unsigned char i;
            unsigned char j;
            unsigned char k;
            char u = 0xe3;
    
            scanf("%d %d",&i,&j);
    
            k = i + j;
    
            printf("%d %d",k,(unsigned char)u);
    
            printf("&i = %u  &j = %u  &k = %u",&i,&j,&k);
    }
    %d是输出时当有符号数输出,%u输出时当无符号数输出。%u无符号数输出是,输出两个字节的数据。
    ????
    char u = 0xe3;
    printf("%u",u);
    结果为65507(FFE3)
    
    printf("");中“aaaaaa”引号里面是一个字符串
    
    sizeof();
    
    申请变量 i 是内存里面真实的数据;&i表示的是变量 i 的地址,地址是虚拟出来的,不真实的存在内存里。
    
    &i这是变量的地址是虚拟出来的,所以在编译器当中就已经默认给定了&i地址的长度,长度是两个字节。(变量的地址长度和变量的申请类型有关??)
    printf("i = %d",* &i);
    
    printf("i = %d",* (char)&i); 就会出错,&i是一个内存中虚拟出来的地址,不存在于内存当中,把它虚拟的地址转成char型肯定会报错。
    printf("i = %d",*&(char)i); 这样就可以成功,先把变量i强转成char,然后在读取它一个字节的数据。
    
    0x4567  45个是地址,67是低地址,内存中存贮的形式是: 67  45 XX XX
    
    
    刚测试了一下,&u的sizeof()的长度是2,不管申请时是char还是int型!
    %u默认输出的就是两个字节
    
    main()
    {
            char u;
            scanf("%d",&u);
            u = 0xe3;
            printf("sizeof = %d\n",sizeof(&u));
            printf("sizeof = %d\n",sizeof((unsigned char)&u));
    
            printf("u = %d  u2= %u\n ",u,u);
            printf("u1= %d u3 = %u",(unsigned char)u,(unsigned char)u);
    }
    


    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2019-9-21 17:18
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2018-10-19 23:20:08 | 显示全部楼层
    居然有沙发,也感谢大佬的学习笔记
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表