• 字符串输出输入函数,const修饰符,内存分区,动态内存管理,指针和函数,结构体


    1.字符串输出输入函数

      读入字符串的方法:

        1) scanf 特点:不能接收空格

        2) gets 特点:可以接受含有空格的字符串 ,不安全

        3) fgets(); 特点:可以帮我们自动根据数组的长度截取适当的长度保存,安全

                如果输入的长度大于数组的长度,自动将数组最后一个元素保存为

               如果输入的长度小于数组的长度,会自动先保存 ,再保存   使用格式:fgets(ch,sizeof(ch),stdin);

      输出字符串的方法:

        1) printf() %s   缺点:不能自动换行 

        2) puts() 特点:  可以自动换行

        3) fputs()特点:不可以的自动换行

         使用格式:fputs(ch,stdout); //stdout表示输出 

    2.const修饰符的使用 

      作用:const作用可以把修饰的变量变成只读的(常量)
      1、修饰变量
        const int a=23;
        int const a = 23;  

      2、修饰指针
        const int *p; //指向可变 ,值不能变
        int const *p; //同上
        int * const p; //指向不可变,值可变
        const int* const p;// 指向和值都不能变  

      技巧:
        const 在 * 的左侧 : 指向可变,值不能变
        const 在 * 的右侧 :指向不可变 值可变

        const 在 * 的两侧 :指向和值都不能变

    3、C语言中的内存管理分配.五大区
      内存分为5大区域
      栈区 -- 存放局部变量,临时变量
      堆区 -- 程序运行过程中,动态分配的内存
      BSS区-- 未初始化的全局变量和静态变量
      数据段 (常量区)-- 已经初始化的全局变量和静态变量
      代码段 -- 源码代码程序编译产生的二进制数据

    4.动态内存管理 

    1) malloc
      (void *)malloc(n) //动态的向内存申请连续的n个字节 返回的是新申请的内存空间的首地址
      int *p = (int *)malloc(100); //p是在栈区 malloc(100) 在堆区
      malloc不会把新申请的空间初始化
      memset(p,'0',100); //全部初始化为0

    2) calloc
      int *p = (int *)calloc(5,4); //申请5个长度为4的空间
      calloc可以把新申请的空间初始化0

    3) realloc
      为已经存在的空间扩展大小
      int *p = (int *)realloc(p,size);

    4) free
      释放我们指定的内存空间
      free(p); //p是我们新申请的内存单元 free后,p是一个野指针
      如果不释放,造成内存的泄露

    5.指针和函数之间的关系
      1)返回值是指针的函数 :指针函数
      char * getday(){
        return "星期一";
      }

    2)函数指针
      指向函数的指针
      格式:返回值 (*指针变量名)(函数的参数);
      int sum(int a,int b){
        return a+b;
      }

    定义:
      格式一:int (*p1)(int a,int b); // 函数指针p1 只能指向返回值是int类型,并且有两个int 类型参数的函数。
          p1 = sum;

      格式二:int (*p2)(int,int);
          p2 = sum;

      格式三:int(*p3)(int a, int b) = sum;

    6. 1、什么是结构体?

      答:若干个相同或者不同类型的数据组成的新的构造类型

      2、定义格式:
      struct 结构体名{
      成员列表;
      };

      3、定义结构体变量。
      struct stu{
        int age;
      }stu1,stu2;

      //匿名结构体
      struct{
        int model;
      }s1;

      //先定义结构体,后定义变量
        struct stu stu3;

      4、初始化结构体变量
        a. 定义结构体同时初始化:
          struct stu{
            int age;
            char name[20];
           }stu1={23,"sss"};

        b. 先定义结构体变量的时候初始化
          struct stu stu3={18,"sb"};

        c. 先定义结构体变量,后初始化
          struct stu stu4;
          strcpy(stu4.name,"xxxx");//stu4.name="xxx";

      5.结构体存储空间计算
        结构体在内存中占用的存储空间是 所有元素占用空间之和(考虑对齐)
        1.逐个元素对齐(下个元素与上个元素对齐)
        2.整体对齐(最后的和能单独整除所有元素)
        3.如果是数组,使用的是基本类型来对齐

  • 相关阅读:
    LAMP应用 wdlinux 配置文件
    Linux mysql忘记root密码
    vim 编辑器 常用的设置
    Virtual PC(VPC)虚拟机安装CentOS 6.0网络配置
    缓存系统memcache的安装,配置和使用
    CentOS 去掉Last login提示/系统欢迎信息
    configure: error: GD build test failed. Please check the config.log for details.
    Centos 6.0 yum 更新源
    MySQL is running but PID file is not found
    Visual Studio快速开发以及Visual Studio 2010新功能介绍
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5094093.html
Copyright © 2020-2023  润新知