TOM 发表于 2017-4-30 12:47:50

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);
          }


}



Hanns 发表于 2018-10-19 23:22:17

沙发!!谢谢分享笔记
页: [1]
查看完整版本: C语言--学习笔记--第三课