十天学会C语言

第09天C语言(00):笔记总结

2017-07-16  本文已影响27人  liyuhong
01-指针和数组(新)
 只要一个指针指向了数组,那么 访问数组就有3种方式

  1.: age[0]

  2.: p[0];

  3.: *[p+0];

  4.: 0[p]
02-指针和字符串
 保存 字符串的两种方式:

  char str[] = "lyh";

  存储的位置 : 栈

  特点 : 相同的字符串 会重复的分配存储空间

  字符串可以修改

  

  char *str = "lyh";

  存储的位置 : 常量区

  特点 : 相同的字符串 不会重复的分配存储空间

  字符串不可以修改

  

       通过数组保存字符串 和 通过指针保存字符串的区别

       如果通过 数组来保存字符串 , 那么字符串是一个变量 str 可以修改

       如果通过 指针来保存字符串 , 那么字符串是一个常量 str2 不能修改

       数组保存的字符串 存储在内存的 栈中,而通过 指针保存的字符串 存储在 常量区

       存储在 栈中的变量有一个特点, 当作用域结束, 系统就会自动释放该变量

       存储在 常量去 的值有一个特点, 不会被释放,而且多个相同的值 对应的地址相同
03-指针和字符串-注意点
 注意: 用指针来保存字符串 不可以被改变

 指针没有初始化 不能随便使用
04-指针数组
 定义数组的格式 : 元素类型 数组名称[元素的个数]
05-指针变量作用
 指针保存的数据 存在常量区,常量区 不会自动释放.所以外面能获取到值
06-指针综合练习
 要求自己实现strlen函数

 四个知识点

     1.任何数值都有真假性 (1真 0假)

     2.++在前 ++在后的特性 (i++ 先获取之前的值,再自增1 --- ++i 先自增1,在操作)

     3.指针+1是加多少 加上指针类型的所占用的字节(char *p p+1 = p+1 --- int *p p+1 = p + 4)

     4.循环只会执行离他最近的一条语句

07-指向函数的指针-基本概念

 对OC的block有一定好处

   函数也会占用一块存储空间

   函数也会占用一块存储空间,所以函数也有自己的地址

   函数的地址保存在函数名中

   函数名就是函数的地址 == 数组名就是数组的地址

  

      指向函数的指针的定义格式

      void (*funtionP) ();

      *              : 代表一个指针

      funtionP       : 代表指针变量的名称, 区分

      (*funtionP)    : 代表将来指向一个函数

      void           : 代表将来 指向的函数 没有返回值

      ()             : 代表将来 指向的函数 没有参数

  

  ---

  没有返回值 没有参数

  没有返回值 有参数

  有返回值   没有参数

  有返回值   有参数
08-指向函数的指针-应用场景
 定义一个方法,给你两个数,用户要求你做加法,你就做加法,用户要求你做减法,那你就做减法

 int demo3(int v1,int v2,int (*p)())

 {

     return p(v1,v2);

 }

  

     printf("sum = %i\n",demo3(10, 20,sum));

     printf("minus = %i\n",demo3(10, 20,minus));
09-指向函数的指-针练习
 #pragma 1.要求用户输入一段英文,将用户输入的英文单词所有的首字母大写
10-结构体-基本概念
 如何定义一个结构体变量

      1.定义结构类型

      2.根据结构体类型,定义结构体变量

      struct 结构体类型名称

      {

         属性;

      };
11-结构体-初始化
 1.定义的同时 初始化

 2.先定义再初始化

 3.先定义再初始化(一次性初始化)

 4. 指定将数据赋值 给指定的属性

 
12-结构体-内存存储细节
 注意: 定义结构体类型 并不会 分配存储空间

  只有定义结构体变量 才会 真正的分配存储空间

   结构体 会首先找到 所有属性 中 占用内存存储空间最大的那个属性,然后按照该属性的倍数类型分配存储空间

   1.找到结构体类型 中 占用存储空间最大的属性, 以后就按照 该属性 占用的存储空间1 来分配(在当前这种情况 每次分配8个字节)

   2.会从第0个属性 开始分配存储, 如果存储空间 不够 就会重新分配,如果存储空间 还有剩余, 那么就会把后面的属性的数据存储到剩余的存储空间中

 
13-结构体-类型定义方式
 1.先定义结构类型, 再定义结构体变量

 2.定义结构体类型的同时 定义结构体变量

 3.定义结构体类型的同时 定义结构体变量, 并且省略结构体名称
14-结构体-类型作用域
 相同作用域 不能有同名的结构体类型

 如果变量 写到函数或者代码块外面, 那么就不是局部变量,而是全局变量

 全局变量的作用域 是从定义的哪一行开始, 知道文件末尾 (暂时这样理解)
15-指向结构体的指针
 /*

  控制台 可以通过 po 输入其他当前的界面获取属性的值

  

  

  如何定义 指向结构体变量的指针

  1.拷贝 结构体类型 和 结构体变量名称

  2.在类型 和名称中间加上一颗星

  

  当指针 指向结构体之后 如何利用指针访问结构体

  结构体变量名称.属性;

  (*结构体指向变量名称).属性;

  结构体指针变量名称->属性;

  

  */
16-结构体-数组
 要求定义变量保存 公司所有部门的绩效(部门名称,部门人数,绩效)
17-结构体-嵌套
 注意 : 如果结构体的属性 又是一个结构体,那么可以通过连续.的方式,访问结构体属性中的属性

 如果结构体类型中的属性 又是一个结构体,那么赋值时候通过{}赋值
18-结构体和函数
 1.将结构体属性传递给函数,在函数中修改形参 不会影响到实参

 2.将结构体名称 作为参数传递, 在函数中修改形参 不会影响到实参

 结构体之间赋值是 值传递, 系统会将结构体的值 拷贝一份 到 B结构体中
19-枚举-基本概念
  枚举就是 专门用于 表示集中固定类型的取值

  枚举的本质 就是基本数据类型, 就是整型

  枚举和结构体一样,要想定义枚举类型变量,那么必须先定义枚举类型

 

 枚举类型定义的格式

     enum 枚举类型名称

     {

     取值,

     };

 

  定义枚举类型的规范

  枚举类型的取值一般以k开头,后面跟上枚举的名称, 跟上当前取值的含义

  和结构体一样,枚举类型的名称 首字母大写
上一篇下一篇

猜你喜欢

热点阅读