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