<十三> 在这里记录一些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】二级指针

指向一级指针的指针

 

posted on 2018-03-10 22:44  就是菁可爱哦  阅读(119)  评论(0编辑  收藏  举报

导航