Head First C 笔记

时间:2024-07-22 21:38:02

嗨翻c语言

1. 入门

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

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

  • 单双引号的区别?

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

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

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

  • Break 和continue?

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

   break不能用于if语句。

2.储存器和指针

  • 两张存储器图

   图一Head First C 笔记

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

    Head First C 笔记

  • Int *a =5

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

  • 指针的作用   

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

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

Head First C 笔记

   存储器和指针的图

  • sizeof(指针) 
   在32位中返回4,在64位中返回8.
  • 数组名做指针

   

 int a []={,,};
int *b =a;
c=sizeof(a);
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

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

    用指针输入数据

   

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

   安全从高到低

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

  • card[]   or   *card?
  •  card []="qwe";//数组
    
     一下这两个等价
    void func(char card[])
    {
    //card 是指针
    } void func(*card)
    {
    //card 是指针
    }

    const与字符串常量

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

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