TOM 发表于 2017-4-30 12:45:38

C语言--学习笔记--第二课

本帖最后由 TOM 于 2017-4-30 13:21 编辑

这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲而已;后来发现根据课程的讲解做做笔记可以加深不少印象);记录的内容和顺序大致和课程相同,也有一些自己的注解和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套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,然后在读取它一个字节的数据。

0x456745个是地址,67是低地址,内存中存贮的形式是: 6745 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 = %du2= %u\n ",u,u);
      printf("u1= %d u3 = %u",(unsigned char)u,(unsigned char)u);
}


Hanns 发表于 2018-10-19 23:20:08

居然有沙发,也感谢大佬的学习笔记
页: [1]
查看完整版本: C语言--学习笔记--第二课