TOM 发表于 2017-4-30 13:09:23

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

这份笔记是学习Nisy的C语言课程时随笔记录的(开始只是想根据每课的内容做个大纲;后来发现根据课程的讲解做做笔记可以加深不少印象),记录的内容和顺序大致和课程相同,也有一些自己的注释和疑问(未进行二次处理,难免有记录失误的地方);笔记中的代码,在turboc2中都可编译运行;看论坛里有人发布过这套C语言的课后作业,好像还没有人发布过笔记,就发出来仅供参考!main()
{
      char a;
      * (a)= 0;
      *(a+1) = 0;

      scanf(" %d ",a);
      printf("%d",*a);
}
结论scanf(" %d ",a);这个语句如果%d前面加的空格,输入的时候也要加空格,如果后面加了空格,scanf就会等一个非空格或回车的字符,然后才执行下面的语句;
=================================================================================
main()
{
      char a;
      * (a)= 0;
      *(a+1) = 0;

      scanf("%d",(char *)a);
      printf("%d",*(int *)a);
}
结论:输入300,输出也是300. scanf存储数据时,需要知道内存的地址和长度。%d就已经规定了2个字节的长度。所以(char *)a只表示地址而已。
=================================================================================
main()
{
      int a = 5;
      int b = 0;

      b = a++;/* a++ <==> a = a + 1; */
      printf("a++ this is %d\n",b);

      b = ++a;
      printf("++a this is %d",b);
}

结果:
a++ this is 5
++a this is 7

结论:
b = a++; 是把a的数据给b,然后再自家1;

b = ++a; 是先自家1,然后再把值给b;

main()
{
      int i;

      int k = 0;
      int a = 0;

      scanf("%d %d %d",i,(i+1),(i+2));
      printf("%d\n",a);
      if(i <= 0)
      {
         printf("%d\n",a);

         printf("%d is Over!!\n",i);
      }
      printf("%d\n",a);

      if(i <= 0)
         printf("%d is Over!!\n",i);
      if(i <= 0)
         printf("%d is Over!!\n",i);

这段代码证明只要是出现a++的话,a就会自加1;if(i <= 0)printf("%d is Over!!\n",i);
这相当于两次a++;if(i <= 0) 不管输入的数出错与否,a都会自加1;所以printf("%d is Over!!\n",i);这就正确了。

main()
{
      int i;

      int k = 0;
      int a = 0;

       scanf("%d %d %d",i,(i+1),(i+2));
      /* if(i <= 0 || i <= 0 || i <= 0) */
         if((++a && i <= 0) || (++a && i <= 0) || (++a && 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 u;
      int k;
      int a = 0;

         scanf("%d %d %d",&i,&u,&k);
         printf("%u %u %u\n",&i,&u,&k);
         if((++a && i <= 0) || (++a && u <= 0) || (++a && k <= 0))
          {
                printf("i+1 is %u %d\n",&i+1,&i+1);
                printf("i+2 is %u %d\n",&i+2,&i+2);

                printf("%d is Over!!\n",*(&i+(a-1)));
          }

这段代码是根据内存地址来定位内存数据;地址分别是65492 65494 65496 但是因为定义的是int型数据,所以&i+(a-1) <==> &i + 1 其实在内存中的地址是两个位数移动的;(&i + n)加几就是加几个&i单元的的长度。




页: [1]
查看完整版本: C语言--学习笔记--第四课