各位看官们,大家好,上一回中咱们说的是多线程的样例。这一回咱们说的样例是:显示变量和函数的地址。

闲话休提,言归正转。让我们一起talk C栗子吧!

在编敲代码时,有时候须要获取程序中变量和函数的地址。今天我们就来介绍下怎样获取它们的地址。

获取变量的地址

获取变量的地址时,仅仅须要使用取地址符对变量直接操作就能够。比如:int a = 1;那么变量a的地址就是&a.该方法适用于大部分变量,只是另一些特殊的变量不能使用该方法。接下来我们分别介绍怎样获取这些特殊变量的地址。

获取数组变量的地址

数组本身就是一个地址,因此直接输出就能够。不须要再使用取地址符对它操作。比如int set[3],直接在程序输出 set的值就能够,它就是该数组的地址。

获取字符串变量的地址

字符串变量和数组相似,它本身也是一个地址。因此,不须要再使用取地址符对它操作。比如char *pStr=”string”。直接输出pStr的内容就能够。它是字符串string的地址。

获取函数的地址

函数的地址也比較特殊。函数名本身就代表了函数的地址,能够直接输出。或者定义一个函数指针间接输出函数的地址。函数比較长,因此不再直接举样例说明。请大家參考以下代码中的样例。

看官们。以下是详细的代码,请大家參考。

#include<stdio.h>

int hello()
{
printf("hello \n"); return 0;
} int show()
{
printf("show function is running \n"); return 0;
}
int main()
{
int a = 1;
int set[3];
char *pStr = "string";
int (*pFunc)() = hello; printf("address of a :%p \n",&a); //显示变量的地址
printf("address of set :%p \n",set); //显示数组的地址
printf("address of string:%p \n",pStr); //显示字符串的地址
printf("address of Function:%p \n",pFunc); //通过函数指针显示函数的地址
printf("address of show :%p \n",show); //直接显示函数的地址 return 0;
}

在上面的样例中。 我们通过printf函数的p參数直接输出的地址值。以下是程序的执行结果,请大家參考:

address of a :0xbfce7a18
address of set :0xbfce7a24
address of string:0x80485d1
address of Function:0x804844d
address of show :0x8048466

另外。除了在程序中直接输出地址值外,我们还能够在调试程序时查看函数的地址,我们能够使用GDB调试工具来查看函数的地址。详细方法例如以下:

  • 1.编译时使用-g參数增加调试信息(gcc -g file.c -s out)。
  • 2.使用GDB进行调试,然后開始执行调试(gdb out , start);
  • 3.使用GDB的info命令查看函数地址(info address function);

以下是一个详细的样例,样例中使用GDB对刚才的程序进行调试:

gcc - g show_address.c -o s                //编译时增加调试信息
gdb s //使用GDB进行调试
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from s...done.
(gdb) start
Temporary breakpoint 1 at 0x8048488: file show_address.c, line 18.
Starting program: /home/talk_8/C_Example/s Temporary breakpoint 1, main () at show_address.c:18
18 int a = 1;
(gdb) info address hello //显示函数hello的地址
Symbol "hello" is a function at address 0x804844d.
(gdb) info address show //显示函数show的地址
Symbol "show" is a function at address 0x8048466.
(gdb) info address main //显示主函数main的地址
Symbol "main" is a function at address 0x804847f.

各位看官,关于显示变量和函数地址的样例咱们就讲到这里。欲知后面还有什么样例,且听下回分解 。

一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)的更多相关文章

  1. 一起talk C栗子吧(第一百二十一回:C语言实例--线程知识体系图)

    各位看官们.大家好,上一回中咱们说的线程属性的样例.这一回咱们说的样例是:线程知识体系图.闲话休提.言归正转. 让我们一起talk C栗子吧! 我们在前面的章回中介绍了与线程相关的知识,在今天的章回中 ...

  2. 一起talk C栗子吧(第一百二十七回:C语言实例--查看main函数的參数)

    各位看官们,大家好,上一回中咱们说的是static关键字的样例,这一回咱们说的样例是:查看main函数的參数.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.我们在第五十七回中介绍过mai ...

  3. 一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)

    各位看官们.大家好,上一回中咱们说的是从内存角度看进程和线程的样例.这一回咱们说的样例是:创建进程时的内存细节.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.我们都知道使用fork函数能 ...

  4. 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)

    各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...

  5. 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据

    第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...

  6. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

  7. 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)

    各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...

  8. 一起talk C栗子吧(第十二回:C语言实例--单链表一)

    各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例.闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们,上一回中咱们没有说详细的样例,并且是说了样例中的文 ...

  9. 第一百二十八节,JavaScript,Ajax

    JavaScript,Ajax 学习要点: 1.XMLHttpRequest 2.GET与POST 3.封装Ajax 2005年Jesse James Garrett发表了一篇文章,标题为:" ...

随机推荐

  1. h5移动端混编总结

    1.通信机制:解决是否能通信的问题: 2.接口:解决调用会话问题: 3.数据.URL正确性:解决数据.URL跳转路径正确性问题.

  2. iOS布局分类

    1.线性布局: 2.集合布局: 3.单元布局: 需要考虑因素: 空间充足.空间不足时内容.尺寸的取舍.

  3. 安卓app测试之内存监控

    一.通过Dumpsys 来取值 1.adb shell dumpsys meminfo 获取的所有进程的内存信息,以及总内存,剩余内存,使用的内存等信息. 2.想获得某一进程内存的详细信息,在后面加上 ...

  4. 梦想CAD控件网页版线型

    增加线型 主要用到函数说明: _DMxDrawX::AddLinetype 增加一个线型定义.详细说明如下: 参数 说明 BSTR pszName 线型名 BSTR pszLineDefine 线定义 ...

  5. TWaver动画之雷达扫描效果

    UI和功能是好的产品的两个重要因素,很多产品往往只注重功能上的设计,而忽略了UI.在这个“看脸”的时代,就算产品的功能很强大,如果UI跟不上步伐,你的产品都会在客户心中大打折扣.做安全和监控的项目中经 ...

  6. dorado 7 使用总结

    最近项目上需要,使用了dorado 7 ,总体感觉还可以,快速开发很方便,然而在方便的同时,难免有些太过繁琐,很多东西都封装了起来,会造成很多不便.因此快速开发的项目可以使用,其它的不推荐.现在打算将 ...

  7. no bundle URL present in react-native?

    Assuming that you are using nvm and multiple versions of node installed, here is the solution: Say t ...

  8. C#创建excel并释放资源

    using System; using Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel; us ...

  9. [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)

    Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...

  10. Windows学习总结(9)——Windows系统常用的网络控制指令

    ping 命令式用来测试TCP/IP 网络是否畅通或者网络连接速度的命 令,其原理是根据计算机唯一标示的IP 地址,当用户给目的地址发 送一个数据包时,对方就会返回一个同样大小的数据包,根据返回的 数 ...