zoukankan      html  css  js  c++  java
  • C语言小总结

      1.函数

      有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的代码,这使程序不精练。因此需要模块化程序设计的思想。

      函数的返回值要匹配,若函数有返回值可以不接受,但是函数没有返回值不能接受。

      传参时实参要与形参匹配。

      函数必须先定义才能使用。

      若函数申明了之后没有实现,编译过程中不会出现错误,但链接运行时会出错。

      形参与实参地址不同当值传递时,函数形参发生改变,但实参没有改变。

      2.数组

      三值合一:

      ar访问的是数组名的值,而这个值恰好是首元素的地址。

      &ar[0]对数组首元素求地址

      &ar是求整个数组空间的地址(恰好是首元素的地址)

      多维数组都可以转化为一维数组。

      二维数组初始化时行可以缺省,但列不可以缺省。

      访问地址得到值只对字符数组成立,对其他数组的访问都只能得到地址

      注意和字符数组越界的问题。

      数组的大小用sizeof,数组的实际大小用strlen

      双引号存的是字符串(系统默认加),单引号存单个字符

      数组访问的底层是指针形式的访问

      数组名作为形参退化为指针(只针对一维数组)

      3.字符串

      字符指针存放的是地址,字符串常量保存在静态常量区值不能改变,字符数组存放的是若干个元素,字符是变量,可以进行赋值改变

      指针可以对指针赋值,但数组名不可以对数组名赋值。

      4.数组指针与指针数组  函数指针和指针函数

      (*ar)[10]  //数组指针,指向数组的指针,强调的是指针

      *ar[10]    //指针数组,存储指针的数组,强调的是数组

      (*ar)()     //函数指针,指向函数的指针,强调的是指针

      *ar()       //指针函数,返回指针的函数,强调的是函数

      5.C之动态内存分配与释放

      全局变量是分配在内存中的静态存储区的,非静态的局部变量是分配在内存中的动态存储区称为栈。

      动态内存分配区域称为堆区,存放临时数据,这些数据不必在程序的声明部分定义,也不必等到函数结束后才释放,而是根据需要随时开辟随时释放。由于未在声明部分定义他们的变量或数组,因此不能通过变量名或者数组名去引用这些数据,只能通过指针来引用。

      在编程时,大概把内存分为三个区域:

      栈区:局部变量,在程序里面定义的

      堆区:malloc calloc realloc函数开辟的,必须手动释放,否则会造成内存泄漏

      静态常量区:静态变量,全局变量 只要主程序结束,生成在其中的变量就撤销

      不可以定义void类型的变量,但可以定义void 类型的指针,void类型的指针可以接收一切类型的指针,想要把void型指针向真实类型转换,则必须进行强制类型转换

      6.自定义类型

      C之自定义类型:struct结构体,union联合体,enum枚举

      7。指针

      指针的本质就是相应类型的地址

      区分:const int* p,int const* p,int *const p和const int* const p

      const int* p和int const* p表明了p所指向的值不能改变。int *const p表示p的值不能改变。而const int* const p 表示p和p所指向的值都不能改变。

      指针两值的四个方面:

        指针的类型:只要把指针声明语句里面指针名字去掉,剩下的部分就是这个指针的名字

        指针所指向的类型:把*去掉,再把名字去掉,剩下的内容就是这个指针所指向的类型

        指针的值(指针所指向的内存区):

        指针本身所具有的内存区:32位系统占四个字节

      当函数用数组做参数的时候数组就会退化为指针。

      8.C之字节对齐

      字节对齐是用空间换时间。

      字节对齐的四个概念:

        1.基本数据类型的自身对齐值

        2.程序指定的对齐值(#pragma pack(value)时的对齐值value)

        3.自定义类型的自身对齐值(即结构体或类的成员自身对齐的最大值)

        4.自定义类型的有效对齐值

          自定义类型的自身对齐值和指定对其中较小的值

          空结构体占一个字节的空间

          当结构体数据类型相同时,则所占空间为元素自身类型空间之和

          当结构体数据类型不同时的处理方法:

            1.先列出其自身大小

            2.往下看,下面数据的大小是上面数据的整数倍

            3.自定义类型的对齐值

              即结构体或类的成员自身对齐的最大值(按照成员的由小到大能节省空间)

        用#pragma pack(value)指定对齐值

          自定义类型的自身对齐值和指定对其中较小的值

        结构体里套上结构体的情况

          要是按一字节对齐,则只需将所有类型的大小加在一起。

          当结构体中有数组时,跟数组无关,只跟数组的类型值有关

          先看内存嵌套的结构体,按照上面的规则进行对齐

          若强制字节对齐,则里外都按照value值对齐

          当结构体有名字时,就升级为一个类型,类型不占空间;若产生一个结构体变量,空间存在。

         结构体的位域:

            从比特位的角度出发

            位域是不能跨字节存储的,也不能夸类型存储的

            位域的大小不能超过自身类型的大小

  • 相关阅读:
    对象布局已知时 C++ 对象指针的转换时地址调整
    采用栈数据结构的二叉树非递归遍历
    ZOJ 3481. Expand Tab
    “金山杯2007逆向分析挑战赛”第一阶段第二题
    “金山杯2007逆向分析挑战赛”第一阶段第一题分析
    对《神奇的C语言》文中例子 5 代码的分析讨论
    对"QQGame-大家来找茬"的辅助工具的改进
    memset 的实现分析
    ZOJ 1958. Friends
    HBase中MVCC的实现机制及应用情况
  • 原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6350201.html
Copyright © 2011-2022 走看看