C语言--学习笔记--第三课
本帖最后由 TOM 于 2017-4-30 13:12 编辑这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲;后来发现根据课程的讲解做做笔记可以加深不少印象);记录的内容和顺序大致和课程相同,也有一些自己的注释和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套C语言的课后作业,好像还没有人发布过笔记,就发出来仅供参考!
main()
{
int i;
int j;
int k;
scanf("%d %d",&i,&j);
printf("%d\n",i + j);
k =(int)&i; /* 把&i的地址给K,需要说明数据类型*/
printf("i = %d\n",&i);
printf("k = %d\nchark = %d",* (int *)k,* (char *)k);/* * (int *)k 这句话的意思是把K单元内存放的数据当成一个地址,然后读取地址里面的数据。 */
}
变量i单独写就是内存中的真实数据,&i这样写代表内存的地址
到目前为止1 + 1就讲解完了,其实就是自己建立一个内存模型,了解数据在内存中的真实存储方式。
========================================================
char k; // 申请一个连续的(char)单元
char i // 申请n 个连续的(char)单元
k <==> *(&k)
i <==> &i
main()
{
char i;
scanf("%d %d",i,i+1);
printf("%d",*i + *(i + 1));
}
输入300(12c) 123(7b)
结果是167(A7)
申请是char单元最大存储是-128 ~ 127为什么结果是167?
因为%d输入时进行了扩展00A7.
疑问?
main()
{
char i;
scanf("%d %d",i,i+2);
printf("%d",*(int *) i + *(int *)(i + 1));
}
输入300(12c) 123(7b)
结果31789 计算过程应该是(7b+1)2c == 7c2c ==31788 为什么结果是31789
疑问2?
* (int *) 这个后面可以跟变量,也可以跟i(代表地址的时候) i
==============================================
main()
{
char i;
scanf("%d %d",i,i+2);
printf("%d",*(int *) i + *((int *)i + 1));
}
*((int *)i + 1)定义了(int *)i 在加1是加前面已经定义的单元长度
int i;
i <==> &i
i = *(i+0)
i = *(i+1)
i = *(i+2)
int k;
k <==> 等于单元里面的数据
三角形:
main()
{
int i;
int k = 0;
scanf("%d %d %d",i,(i+1),(i+2));
if(i <= 0)
{
printf("%d is Over!!\n",i);
k = 1;
}
if(i <= 0)
{
printf("%d is Over!!\n",i);
k = 1;
}
if(i <= 0)
{
printf("%d is Over!!\n",i);
k = 1;
}
if(i+i > i && i+i > i && i+i > i)
{
;
}
else
{
k = 1;
}
if( k == 1 )
{
printf("SJX is Error!!!");
}
else
{
printf("%d",i + i + i);
}
}
优化一下(不完美)
main()
{
int i;
int k = 0;
scanf("%d %d %d",i,(i+1),(i+2));
if(i <= 0 || i <= 0 || i <= 0)
{
printf("%d is Over!!\n",i);
k = 1;
}
if(i+i > i && i+i > i && i+i > i)
{
;
}
else
{
k = 1;
}
if( k == 1 )
{
printf("SJX is Error!!!");
}
else
{
printf("%d",i + i + i);
}
}
沙发!!谢谢分享笔记
页:
[1]