zoukankan      html  css  js  c++  java
  • <十三> 在这里记录一些c高级的知识

    【1】GNU工具

    1. 编译工具:把一个源程序编译为一个可执行程序(gcc)
    2. 调试工具:能对可执行程序进行源码或汇编级调试(gdb)
    3. 软件工程工具:用于协助多人开发或大型软件项目的管理,如make

    【2】gcc编译器

    1.预处理

    将头文件或者宏定义展开添加到程序代码中
    注意:预处理不检查语法错误

    gcc -E hello.c -o hello.i

    2.编译

    将程序编译成汇编文件
    注意:检查语法错误

    gcc -S hello.i -o hello.s

    3.汇编

    将汇编程序需编译生成二进制代码

    gcc -c hello.s -o hello.o

    4.链接

    将程序运行需要的所有依赖文件链接生成一个可执行文件

    gcc hello.o -o hello

    -Wall:尽可能多的显示警告信息

    -g : 生成gdb调试信息

    【3】gdb调试工具

    注意:要想使用gdb工具,那么gcc编译选项中一定要加入‘-g

    eg.gcc -g hello.c -o hello
    gdb hello

    • 查看文件: l (每次只能打印10行数据)
    • 退出gdb: q
    • 设置断点 : b n(在第n行设置断点)
    • 查看断点情况 : info b
    • 运行代码 : r (从文件开头运行至断点处停止,断点所在行的代码不运行)
    • 查看变量值: p Val(查看变量Val的值)
    • 单步运行 : n或s(从断点处开始运行程序,每次运行一行代码)
    • 恢复程序运行 : c
    • 删除断点: del n 删除第n个断点

    【4】指针

    1. 地址常量
    2. 指针变量 :存放指针(地址)的变量

    *  的作用:

    (1)声明变量:表示该变量是指针

    数据类型
    指针所指向对象的数据类型
    (2)操作指针:指针解引用(取出指针所指向对象的值)
    (3)指针降级:行指针--》列指针

    指针运算
    (1)指针加减一个n的运算

    p + n : p + n*指针对象的数据类型字节长度
    p - n

    (2)关系运算

    判断地址的大小

    (3)自增自减

    p++p--
    ++、--如果放在变量后面,允许变量先参与其他所有的运算
    ++、--如果放在变量前面面,变量先自增自减再参与其他的运算
    注意:地址常量不能自增自减
    *p++:*p--->p++;
    (*p)++:先取值,然后将取出的值加1

    【5】指针和数组

    数组名是数组的首地址(地址常量)
    二维数组:存放一维数组的数组

    1.数组指针:指向数组指针

    int a[2][4]
    int(*p)[4];

    2.指针数组:存放指针的数组

    int* p[3];

    【6】函数

    1.传参
    (1)赋值传参

    修改形参的值不会影响实参的值

    (2)地址传参

    可以通过地址(指针)修改变量的值

    2.指针函数

    返回值是指针函数
    定义方式:
    数据类型 * 函数名(参数列表);
    int* fun();

    3.函数指针

    指向函数的指针
    函数指针变量说明的一般形式如下:

    定义方式:

    <数据类型> (*<函数指针名称>)(<参数说明列表>);
    int (*p)(int,int);

    4.函数指针数组

    存放函数指针的数组
    <数据类型> (*<函数指针名称>[元素个数])(<参数说明列表>);
    int (*p[2])(int,int);

    【7】回调函数

    • 将函数名作为形式参数的函数
    • 调用函数本身

    【8】const

    const修饰的变量是常量(只读型变量)
    1.常量化指针对象

    const int*
    int const*

    2.常量化指针变量

    int* const

    3.常量化指针变量及其对象

    const int* const

    【9】void

    void型的指针变量是一种指向不确定数据类型的指针变量。它可以通过强制类型转换让该变量指向任何数据类型的对象。

    一般形式为:

    void *<指针变量名> ;

    【10】二级指针

    指向一级指针的指针

     

    青春看起来如此完美, 没空闲去浪费时间。 <我们最后的话——刺猬>
  • 相关阅读:
    Android从零开发目录
    全国软考数据库系统工程师教程(第2版) 第1章 计算机系统知识
    全国软考数据库系统工程师教程(第2版)目录
    jvm性能调优(转载)
    开博宣言
    使用C#为Uipath封装控件
    Java时间简单操作
    js限制文本框内只能输入数字
    正则表达式语法
    JVM调优浅谈
  • 原文地址:https://www.cnblogs.com/WangJing0506/p/8542504.html
Copyright © 2011-2022 走看看