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

闲话休提,言归正转。让我们一起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. 1619. [HEOI2012]采花

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比 时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿 ...

  2. Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

    问题描述:使用Glide加载RecyclerView的Item中的图片,RecyclerView使用了瀑布流展示图片,但是滚动时图片会不断的加载,并且大小位置都会改变,造成显示错乱. 解决方法:使用瀑 ...

  3. React组件的防呆机制(propTypes)

    Prop验证 随着应用不断变大,为了保证组件被正确使用变得越来越重要.为此我们引入propsTypes.React.PropTypes提供很多验证器(valodator)来验证传入的数据的有效性.当向 ...

  4. 【C++】智能指针简述(五):解决循环引用的weak_ptr

    总结一下前文内容: 1.智能指针通过RAII方法来管理指针:构造对象时,完成资源初始化;析构对象时,对资源进行清理及汕尾. 2.auto_ptr,通过“转移所有权”来防止析构一块内存多次.(如何转移? ...

  5. 关于vue构建项目的一些指令

    第一步: brew install nodejs(MAC机子下)  Windows直接官网下载对应版本node.js 第二步: 获取nodejs模块安装目录访问权限(Windows系统忽略)sudo ...

  6. [Windows Server 2012] 初识Windows Server 2012

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:初次见识Win ...

  7. Discuz伪静态代码

    <?php /** * [伪静态跳转(xugui_redirect.{modulename})] (C)2012-2099 Powered by 懒人V难人. * Version: 1.0 * ...

  8. 09Java Server Pages 错误处理

    Java Server Pages 错误处理 通常JSP在执行的时候,在两个阶段会发生错误.第一个是JSP网页转译成Servlet类的时候,另一个就是Servlet类处理每一个请求的时候.在第一个阶段 ...

  9. Luogu P2176 [USACO14FEB]路障Roadblock

    解题思路 这是一道最短路题目,不知道大家有没有做过玛丽卡这道题目,如果没做,在做完这道题之后可以去拿个双倍经验哦 先求出一张图中的最短路径,并将其记录下来,我们首先思考:要有增量的前提是新的最短路径比 ...

  10. FileOutputStream将从一个文件中读取的内容写到另一个文件中

    package com.janson.day2018082 import java.io.FileInputStream; import java.io.FileNotFoundException; ...