c语言怎么求出函数段地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么求出函数段地址相关的知识,希望对你有一定的参考价值。

int a;
void f1(void)

a=1;

void f2(void)

a=2;

void f3(void)

a=3;

main()

printf("%x\n %x\n %x\n%x\n%x",f1,f2,f3,main);

开头的地址?直接把函数名用16进制数出来
如printf("%x\n",main());追问

这个只是函数的偏移地址吧 段地址呢? 怎么打印出来呢?

追答

不知道啦 sorry

追问

谢谢 没关系

参考技术A 调试程序时候可以看到函数16位地址的追问

我就是想通过打印的方式输出来

参考技术B 你把函数写好后编译一下,然后在反汇编里就能看到 参考技术C 问题太简洁了,不太了解意思

C语言之函数指针用法总结

一、函数返回指针值

函数是实现特定功能的程序代码的集合,函数代码在内存中也要占据一段存储空间 (代码区内),
这段存储空间的起始地址称为函数入口地址。C语言规定函数入口地址为函数的指针,
即函数名既代表函数,又是函数的指针(或地址)。

1、函数的返回类型可以是指针类型,即函数返回指针值,其定义形式为:

技术图片

技术图片

2、函数返回指针值,需要考虑指针有效性的问题,例如: 

技术图片

这个返回有问题,因为它返回的是函数局部变量a的地址值。当函数调用结束后,
函数局部变量会释放,变成未知对象。在return语句时,&a还是有效的,
但主调函数获得这个地址时已经是无效的。

3、函数返回的分类
①由主调函数传递进去的有效指针值。
②由动态分配得到的指针值。
③0值指针,表示无效指针。

4、例题:编写函数stringstr, 实现strstr函数的查找子字符串功能。

stringstr函数的作用是在string字符串中查找有无与strCharSet相同的字符串。
如果有,返回该字符串在string中的位置的指针,否则返回空指针表示没有相同的字符串。

 1 #include<stdio.h>
 2 const char *stringstr(const char *string,const char *strCharSet){
 3     const char* p=string,*r=strCharSet;
 4     while(*p!=){
 5         while(*p++==*r++); //关键:比较直到字符串结束或不相等为止
 6         if(*r==) return p; //包含strCharSet返回string当前指针
 7         r=strCharSet; //重新指向strCharSet
 8         p=++string; //从string下一个字符起始
 9     }
10     return NULL; //不包含strCharSet返回NULL    
11 }
12 
13 int main(){
14     char s1[80]="*A*AB*ABC*ABCD",s2[80]="ABC";
15     const char *ptr;
16     ptr=(char *)stringstr(s1,s2);
17     if(ptr!=NULL) printf("%s
",ptr);
18     return 0;
19 }

程序第5行是字符串比较的关键,无论p或是r指向的字符串,只要指向的
字符串有不相同的字符,循环就结束。此时有三中情况:
①p和r均没有指向两个字符串的结束,说明字符串中间就有字符不相等。
②p指向字符串结束,r没有指向字符串的结束,说明r后面还有没有比较的字符。
③p尚未指向字符串结束,r指向字符串的结束。
显然,第③种情况说明p所指向的字符串包含了strCharSet字符串,则r应指向结束符。

以上是关于c语言怎么求出函数段地址的主要内容,如果未能解决你的问题,请参考以下文章

c语言数组长度函数

函数指针及其定义和用法,C语言函数指针详解

用C语言实现求出范围内的亲和数

在C语言中,数组作为参数,是怎样在函数之间传递的啊??

用C语言求出100到1000之间的水仙花数?

在C语言中,如何给函数分配内存?