1.函数

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

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

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

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

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

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

  2.数组

  三值合一:

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

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

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

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

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

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

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

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

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

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

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

  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语言小总结的更多相关文章

  1. 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)

    前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...

  2. 通过反汇编C语言小程序学习Liunx汇编语言

    大家好!    我是来自山东师范大学的吴乐.    今天在<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...

  3. 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

    ​ 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...

  4. Linux下简单C语言小程序的反汇编分析

    韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...

  5. c语言小程序以及java生成注释文档方法

    c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...

  6. C语言小程序——推箱子(窄字符和宽字符)

    C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...

  7. Linux C语言小程序

    Linux C语言小程序 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...

  8. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  9. 012-C语言小游戏之推箱子

    012-C语言小游戏之推箱子 一.创建游戏地图   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #define ROWS 11 #define COLS 12   char ...

  10. 自动生成.py文件头部的C语言小程序

    每次都 vi xxx.py 然后再打 #!/usr/bin/env python 等等的程序头信息感觉有点麻烦,于是便想着写一个小程序自动生成这些头信息了,顺便在 ~/.bashrc 里写入 alia ...

随机推荐

  1. Python 生成MYSQL inser语句

    背景: 一般来说,navicat生成的insert已经够用了 如果说一张表有2,30个字段,每个字段还得一一对上,其实是很难的.所以抽空写了个小程序.用它完全不用担心字段对不上了.因为没有时间,需要手 ...

  2. 66. Plus One 数组加1

    [抄题]: Given a non-negative integer represented as a non-empty array of digits, plus one to the integ ...

  3. linux系统中的单引号和双引号

    一.为什么用quoting 前面说到,命令行在内容上主要由literal(一般文字)和meta(元字符)组成,而meta又由IFS.CR和其他字符组成(如=,$, > 等),通常这些原元字符都有 ...

  4. ansible的ad-hoc模式

    一.什么是ad-hoc模式 ansible中有两种模式,分别是ad-hoc模式和playbook模式 ad-hoc简而言之,就是"临时命令" 二.ad-hoc模式使用的场景 场景一 ...

  5. 线上服务内存OOM问题定位

    转自:架构师之路,http://mp.weixin.qq.com/s/iOC1fiKDItn3QY5abWIelg 相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的 ...

  6. [BAT] 以当前时间为名创建文件夹,将本地文件夹里的文件拷贝到远程共享目录,而且保证本地和Jenkins上运行都成功

    @echo off rem connect to szotpc801 net use * /del /yes NET USE X: \\10.66.234.95\d$ Autotest123 /use ...

  7. overflow 在ie7下失效

    问题原因: 当父元素的后代元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效. 解决方法: 在父元素中使用position:relative;即 ...

  8. HDU 2602 Bone Collector (01背包DP)

    题意:给定一个体积,和一些物品的价值和体积,问你最大的价值. 析:最基础的01背包,dp[i] 表示体积 i 时最大价值. 代码如下: #pragma comment(linker, "/S ...

  9. toolbox类

    新建Qt  应用,项目名称为“c”,基类选择“QWidget”,取消“创建界面”复选框的选中状态. 添加该工程的提供主要显示界面的函数所在的文件,在“c”项目名上单击鼠标右键,在弹出的快捷菜单中选择“ ...

  10. centos 学习总结

    我用的是6.4 添加中文输入法 .su root .yum install "@Chinese Support" .exit .回到桌面,system->preference ...