函数和指针
来源:互联网 发布:网络台球赌博 编辑:程序博客网 时间:2024/06/16 15:11
【1】GDB调试![](https://note.youdao.com/yws/res/1271/E8A8D0120BFF40338AFDC1C576491CE1)
![](https://note.youdao.com/yws/res/1274/B380674B6E8D48E1875E370BC0E8BFED)
![](https://note.youdao.com/yws/res/1276/7C3ED39923F04CCD9A4716FEA01665A8)
![](https://note.youdao.com/yws/res/1281/0B79A1CAE758450982DBD054F50E60E9)
![](https://note.youdao.com/yws/res/1298/8946FEC5910744A6A7A1152ABCB3F13B)
![](https://note.youdao.com/yws/res/1319/1651ECDFD55E44A883EE14570B510287)
![](https://note.youdao.com/yws/res/1343/3E88AB15CB7E43CC91F466E9353C7C3B)
![](https://note.youdao.com/yws/res/1346/E4E6EBA4F62F4CACB3A198C70FBDB826)
![](https://note.youdao.com/yws/res/1355/71FDBBFEB5D74145800EC8CE7F0038B5)
![](https://note.youdao.com/yws/res/1357/68360B0A431C4DD5953B1747F8544AF6)
![](https://note.youdao.com/yws/res/1382/E10A737E46464E299994B4CB9FAACE0A)
![](https://note.youdao.com/yws/res/1379/AE6553DB0E274FEB841DA856288D9E51)
gcc -g test.c -o test
gdb ./test
l 查看文件
b n 设置断点
info b 查看断点信息
r 程序运行起来
n , s 查看变量的值
q 退出进程
c 继续运行
gcc 编译步骤
1.预处理 -E
2.编译 -S .s
2.汇编 -c .o
4.链接
【2】指针数组
本质是一个数组,数组中的每一个元素,都是一个指针(地址)。
int a[10];
int * p = a;
int a[3][2];
// a[0] , a[1], a[2] 代表三个一维数组, 移动一下,代表移动一个元素
// a 代表 二维数组的数组名,数组的首地址(值相等),代表是首行的行地址。移动一下,代表移动一行。
int * p[3];
二维数组
int a[3],[2];
int *p[3];
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
//a代表二维数组是数组名,数组的首地址,代表的是首行的行地址。移动一下代表移动一行。
【3】数组指针
本质是一个指针,它指向一个数组。
int a[3][2];
int (* p)[m]; m的大小 取决于 二维数组的列的大小,m = 2;
p = a;
【4】公式
一维数组:
int *p;
int a[10];
p = a;
*(p+i) <==> p[i] <==> a[i] <==> *(a+i)
二维数组:
int a[3][4];
int (*p)[4];
p = a;
a[i][j] <==> *(a[i] + j) <==> *(*(a+i) + j) <==> *(p[i] + j) <==> *(*(p+i) + j) <==> p[i][j];
【5】内存的分区
栈区 ,静态区 ,全局变量区 ,堆区 ,常量区。
栈区:函数执行结束,栈空间释放。可读可写
char str[32] = "hello world"; 保存在数组中,数组在栈区。
常量区:常量区中数据只读,不能进行修改。否则段错误。常量区只能在定义时申请。
char * p = "hello world" ; 常量区
char * str1[3] = {"Beijing", "Wuhan", "Shanghai"}; //字符串, 保存常量区
使用指针实现字符逆序
实现字符的交换
1--使用temp
2--使用异或
3--使用加
【6】递归函数
所谓递归函数就是指一个函数的函数体中直接调用或者间接调用自身的函数。
递归函数必须拥有结束条件,否则是死循环。
函数申请的空间在栈上。递归函数非常耗费 栈空间。
#include<stdio.h>
int sum(int a)
{
int ret=0;
if (a==1)
return 1;
ret = a * sum(a-1);
return ret;
}
int main()
{
printf("%d \n",sum(5));
}
运行过程
0 0
- 指针函数和函数指针
- 函数指针和指针函数
- 指针函数和函数指针
- 指针函数和函数指针
- 函数指针和指针函数
- 函数指针和指针函数
- 函数指针和指针函数
- 指针函数和函数指针
- 函数指针和指针函数
- 指针函数和函数指针
- 函数指针和指针函数
- 指针函数和函数指针
- 指针函数和函数指针
- 指针函数和函数指针
- 函数指针和指针函数
- 函数指针和指针函数
- 函数指针和指针函数
- 函数指针和指针函数
- 变长参数函数(转载)
- eclipse快捷键
- MySQL统计函数记录——时间段统计
- 总结Spring、Hibernate、Struts2官网下载jar文件
- jQuery监听回车事件
- 函数和指针
- C++ STL--stack/queue 的使用方法
- LaTeX分文件编译教程
- Oracle ORA-12519: TNS:no appropriate service handler found 解决
- 在jsp中获取数据库连接和关闭资源的方法
- android-BluetoothDevice
- 浅谈Hibernate批量操作
- #500-2 成员变量和成员函数
- Struts2源码浅析-ConfigurationProvider