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);
}
居然有沙发,也感谢大佬的学习笔记
页:
[1]