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

闲话休提,言归正转。让我们一起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. Sql 存储过程动态添加where条件

    )= '2,3' )= '' ) if(@bussHallId is not null) set @strWhere = @strWhere + ' and bh.ID in ('+@bussHall ...

  2. NodeJs学习记录(六)使用 res.locals 传递参数到页面

    res.locals的生命周期是单次请求,有点类似于java servlet 里的  httpServletRequest.setAttribute("param1",1); 既然 ...

  3. MySql 1248 - Every derived table must have its own alias

    执行一个sql语句,报错:1248 - Every derived table must have its own alias 提示说每一个衍生出来的表,必须要有自己的别名 执行子查询的时候,外层查询 ...

  4. IDEA提示 found duplicate code

    原因: IntelliJ IDEA提示Found duplicated code in this file 这不是我们代码错误,而是idea提示说我们的代码有重复,在项目的其他地方有同样的代码片段 解 ...

  5. ProcessBar 与SeekBar进度条

    1.进度条关键属性 2.进度条的常用方法 progress = (ProgressBar) findViewById(R.id.horiz); (1)获取第一进度条:progress.getProgr ...

  6. Android基础TOP7_1:ListView制作列表

    结构: Activity: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...

  7. Pro ASP.NET Core MVC 第6版翻译 目录页

    Pro ASP.NET Core MVC 第6版 目录 第一部分 第一章 ASP.NET Core MVC 的前世今生 第二章 第一个MVC应用程序(上) 第二章 第一个MVC应用程序(下) 第三章 ...

  8. socket相关函数

    socket() 我们使用系统调用socket()来获得文件描述符:#include<sys/types.h>#include<sys/socket.h>int socket( ...

  9. Vue.js 模板语法

    本章节将详细介绍 Vue.js 模板语法,如果对 HTML +Css +JavaScript 有一定的了解,学习起来将信手拈来. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 ...

  10. 1054.求平均数-PAT乙级真题

    从其他博客优秀代码中学到了些技巧,记录一下. 思路:使用sscanf和sprintf函数. sscanf() – 从一个字符串中读进与指定格式相符的数据 sprintf() – 字符串格式化命令,主要 ...