A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Day13 笔记


1,指针与函数

    1),指针作为函数的参数
            效果:地址传递 可以在函数修改实参的值
                     如果不想被修改 指针形参请加上 const

    2),指针作为函数的返回值

            int * test1(){
               int arr[] = {10,20,30};
               return arr;
            }

            但是不能返回局部变量的地址
            局部变量 在函数返回值的时候 arr空间已经被回收了 arr已经被销毁

            如果需要返回一个指针
            那么就要保证这个指针指向的空间在函数结束以后仍然存在
            可以将空间申请在堆区 返回堆区的地址

            可以直接返回值符串 用char * 接受 因为字符串本身就是存储在常量区


2,指向函数的指针

   指针是指向内存中的一个字节空间的
   内存中也会有指令 代码

   声明:1个指向函数的指针 并不是任意的函数都可以指向
            要求制定的函数的返回值类型和参数描述必须要与指针一样
            返回值类型 (*指针名)([参数列表]);
            例如:void (*pFunction)();
            int (*pFunction)(int num1,int num2);

   初始化:void (*pFunction)()= 符合条件的函数名;

   使用:  pFunction();
             或者(*pFunction)();

   
3,结构体及其初始化

   struct Student {
     char *name;
     int number
     int score
   };

   注意:struct 的 类型名 每个单词首字母都大写

   初始化:1),先声明变量 再一个一个赋值
               2),struct Student xiaoHua = {“小花”,10112,98};
               3),struct Student lilei = {“李雷”};
               4),struct Student jim = {“.name = “吉姆”, .age=17, .score=98”};


4,结构体作用域

   如果结构体类型 定义在函数的内部 那么只能在函数的内部使用
   如果需要所有函数都适用 就定义在最顶上就可以了

   一般情况下 结构体都是定义在函数外面的 因为所有的函数都需要去使用


5,结构体变量之间的相互赋值

   struct Student xiaoHua = xiaoMing;
   
   原理:将原结构体变量中的每一个变量值赋值给新的结构体变量中的对应的变量。
            结构体变量之间的赋值是值传递

   
6,结构体数组

   struct Student students[5];
   先声明结构体数组 然后用下标一个一个赋值

   初始化:
   struct Student student[5]={{小明,56,54},{},{},{},{}};
   或者
   struct Student student[5];
   student[0]=(struct Student){小明,56,54};
   注意不能少了(struct Student)

   数组长度计算:
   sizeof(students)/sizeof(struct Student);

   
7,结构体指针

   1),格式 struct 结构体类型名称 * 指针名;
   2),初始化 struct Student *pStu = &xiaoMing;
   3),访问 (*pStu).name
                    pStu->name 也可以


8,结构体嵌套

   当我们定义结构体时发现某个成员变量也需要多个变量表示
   struct Birthday {
   };
   struct people{
      struct Birthday data;
   };
   

9,结构体与函数

   1),结构体作为函数的参数
           这时是值传递 将内部各个小变量的值传递至形参
  
           如果你希望函数内部能修改实参的值 就传递结构体指针

   2),结构体作为函数的返回值

           返回类型为结构体类型 在主函数中定义结构体变量接受返回值
           如果要返回结构体变量的地址,那么就要把这个结构体变量创建在堆区


10,枚举的简单使用

   enum Direction {
         East
         West
         North
         South
   }

   每个枚举项 都有一个对应的整数值 从0开始

   枚举变量中存储的事枚举项对应的整形的数
   所有使用%d输出枚举变量的值。      
     
   一般不给枚举变量赋整数 虽然他的确是4个字节的整形
   因为给整数 代码的可读性就会很差

   我们还可以手动指定每个枚举值代表的整形的数
   

11,枚举的使用规范

   枚举类型的名称命名规范:每个单词的首字母大写
   枚举项的名称命名规范:以枚举类型名称开头加上单词 每个单词首字母大写
         原因:在赋值的时候方便取值。


12,typedef

   作用:为一个已经存在的数据类型 取一个别名
            如果我们想要使用这个类型,使用别名就可以了。

   语法:typedef 已经存在的数据类型 别名;
            例如 typedef int itheima;
              
            这个时候itheima完全等价于int 类型

   注:一秒钟让你的C语言拥有String类型
         typedef char* String;

   size_t 其实就是Usigned long的 别名

   所以 当数据类型名称很长的时候 就可以为这个类型取一个简单的别名 方便使用


13,用typedef 给结构体类型和枚举类型

   可以在定义这个结构体类型的时候取一个别名
  
   最常用的是给匿名结构体类型取别名
   
   typedef struct{}Student;
   typedef enum{} Direction










1 个回复

倒序浏览
很不错的呢,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马