指针实现变量交换值

#include <stdio.h>
void change(int *a,int *b) {
int tmp = *a;
*a = *b;// 将指针a所在地址的值,更换为b地址的值
*b = tmp;
} int main()
{
int a=5;
int b=3; change(&a,&b); // 指针a获取a的地址,指针b获取b的地址 printf("num a=%d\nnum b=%d \n",a,b);
return 0;
}

让我们用gdb工具来看看其中的奥妙。

root@jiqing:~/cspace/pointer# gcc -g main.c -o main.out

生成gdb调试版本的main.out文件。

root@jiqing:~/cspace/pointer# gdb main.out

进入调试模式

(gdb) l
1 #include <stdio.h>
2 void change(int *a,int *b) {
3 int tmp = *a;
4 *a = *b;// 将指针a所在地址的值,更换为b地址的值
5 *b = tmp;
6 }
7
8 int main()
9 {
10 int a=5;

l 进行查看

(gdb) start
Temporary breakpoint 1 at 0x4005cb: file main.c, line 9.
Starting program: /root/cspace/pointer/main.out Temporary breakpoint 1, main () at main.c:9
9 {

start 开始执行

(gdb) n
10 int a=5;

n 下一步

(gdb) n
13 change(&a,&b); // 指针a获取a的地址,指针b获取b的地址
(gdb) s
change (a=0x7fffffffe4d0, b=0x7fffffffe4d4) at main.c:3
3 int tmp = *a;

s 进入子函数

(gdb) p a
$1 = (int *) 0x7fffffffe4d0
(gdb) p b
$2 = (int *) 0x7fffffffe4d4
(gdb) p *a
$5 = 3
(gdb) p *b
$6 = 5

p 打印值。经过交换之后,a变成了3 ,b变成了5。

(gdb) q
A debugging session is active. Inferior 1 [process 11754] will be killed. Quit anyway? (y or n) y

q退出。

通过gdb可以一步一步的查看程序的执行情况,看到内存的值。

窥探程序执行的奥秘。

Linuxc - gdb调试程序的更多相关文章

  1. 用GDB调试程序(一)

    http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...

  2. Linux下使用GDB调试程序

    问题描述:          Linux下使用GDB调试程序 问题解决:          (1)生成调试文件 注:         使用命令   gdb IOStream.c   -o IOStre ...

  3. 用gdb调试程序笔记: 以段错误(Segmental fault)为例

    用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...

  4. 用GDB调试程序

    转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...

  5. gdb调试程序函数名为问号,什么原因?step by step解决方案

    gdb调试程序函数名为问号,什么原因? http://bbs.chinaunix.net/thread-1823649-1-1.html http://www.bubuko.com/infodetai ...

  6. 用gdb调试程序(Linux环境)

    一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)   ...

  7. [Z] 用GDB调试程序

    原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工 ...

  8. 用 GDB 调试程序

    Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的 ...

  9. 转载 gdb调试程序

    转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ...

随机推荐

  1. vue2.0 项目build后资源文件报错404的解决方案

    当vue项目build后,我们会看到css.js报错404的问题: 那我们就去找错误原因吧. 首先,查看build后的dist文件目录 可以看出,js.css在index.html的同级目录下: 然后 ...

  2. window.atob()与window.btoa()方法实现编码与解码

    window.atob() 与window.btoa() WindowBase64.atob() 函数用来解码一个已经被base-64编码过的数据.你可以使用 window.btoa() 方法来编码一 ...

  3. EditTable-V1.0--续集

    上一个功能有点少,这个V1.0版本是最小集合的. ================================= 双击单元格编辑,可以添加,删除单元格.并且保持相邻单元格不同的背景色. 引用了“M ...

  4. Geohash-》通过经纬度计算两地距离的函数

    /**      * 根据起点坐标和终点坐标测距离      * @param  [array]   $from  [起点坐标(经纬度),例如:array(118.012951,36.810024)] ...

  5. 【CSS初识】

    一.CSS是什么? CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距.高度.宽度.背景图像.高级定位等方面. HTML用于结构化内容:CSS用于格式化结构化的内容. ...

  6. 【SmartOS】轻量级多任务调度系统

    SmartOS是一个完全由新生命团队设计的嵌入式操作系统,主要应用于智能家居.物联网.工业自动化控制等领域. ARM Cortex-M系列微处理器几乎全都做成单核心,对于业务逻辑较复杂的物联网就显得难 ...

  7. es6的常用语法

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  8. Django-基础之web框架

    http协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  9. Sass和Compass入门

    一.前言 1.Sass是什么? Sass可以简化你的Css工作流,并可以使你的Css的扩展和维护工作变的更加容易!例如,曾几时何,因为客户的需求的变更,你必须不断的通过查找和替换来更改一个像素值,或者 ...

  10. x+y=xy

        有一天,我拿这一本本子给两位同学看,问他们这本本子多少钱,一个说3块,一个说1.5块,但它实际上是4.5块.于是,我们发现,3X1.5=4.5,3+1.5=4.5.那么这样的数有哪些呢?    ...