Head First C 笔记

嗨翻c语言

1. 入门

  • 为什么字符从零开始编号?  

   字符的索引数值表示的是一个偏移量,它表示的是当前所引用的字符与第一个字符之间差多少个字符。

  • 单双引号的区别?

   单引号 一个字符,双~ 字符串

  • 字符串字面值和字符数组的区别?

   前者是常量,一旦赋值,不能再修改。

  • Break 和continue?

   break是退出循环,continue是退出当前循环并且进行下一次循环。

   break不能用于if语句。

2.储存器和指针

  • 两张存储器图

   图一

   图二                            一个学JAVA时用的图(来源博瑞思创—翁老师)

    

  • Int *a =5   

    A 是一个指针变量,它保存一个地址,地址中保存一个int类型的数值5

  • 指针的作用   

   指针可以避免副本的产生和共享数据。

  • 指针像是一个遥控器,存储器像是一个冰箱。

   存储器和指针的图 
  • sizeof(指针) 
   在32位中返回4,在64位中返回8.
  • 数组名做指针

   

1 int a []={1,2,3};
2 int *b =a;
3 c=sizeof(a);
4 d=sizeof(b);

   c = 3          d = 4/8 (32/64)

   &a == a    &b! = b

  • 指针的退化   

     把数组赋给指针变量,指针变量就会只知道数组的地址信息,而不知道数组的大小。相当于指针丢失了一些信息,称这种信息丢失为退化

   数组变量不能指向其他地方

  • 指针类型

   指针也是有类型,char int  等,主要是在进行指针运算时可以根据指针类型进行转换,比如char类型的指针a ,a+1 存储器地址 +1

                                           int类型的~b                 ,b+1 ~ +4

  • 指针输出
 1 int num[]={1,2,3}
 2 printf("%p",num);//地址
 3 printf("%i",num[1]);//数值
 4 printf("%i",*(num+1));//数值
 5 
 6 
 7 
 8 char *msg="Hello"
 9 puts(msg+1)//字符
10 printf("%p",msg)//地址
  • 指针的加法交换律(来源:百度)
  • 1 int dose[]={1,2,3};
    2 
    3 dose[2] == *(dose+2)            ==            *(2+dose)  ==2[dose]
    4 
    5 只要一个是指针,一个是整形就行。

    用指针输入数据

   

1 fgets(food,sizeof(food),stdin);
2 scanf("%4s",food);
3 gets(food);

   安全从高到低

   scnaf遇到空格就会停止。(亲测有用)

  • card[]   or   *card?
  •  1 card []="qwe";//数组
     2 
     3 
     4 
     5 一下这两个等价
     6 void func(char card[])
     7 {
     8 //card 是指针
     9 }
    10 
    11 void func(*card)
    12 {
    13 //card 是指针
    14 }

    const与字符串常量

   字符串常量都是只读的,不可修改。加了const以后,会在你试图修改const修饰过的变量时编译器报错。

  • 字符串常量和字符数组
1 char * card="QWE"//不可修改
2 char  car[]="BBB"//可修改

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2018-01-04 14:48  MoRua  阅读(193)  评论(0编辑  收藏  举报