返回指针的函数与指向函数的指针的用法

#include<stdio.h>

#include<stdlib.h>

void *func(){

/*

* 一种很容易犯的错误,将局部变量的地址返回

*/

int m;

printf("define as void *func()/n");

return &m;

}

/*

* 声明一个指向函数的指针,指向返回类型为void指针的函数

*/

void *(*pfunc)();

/*

void (*pfun)();

* 声明一个函数,指向一个返回void的函数。其实这个和第一种

* void *func()是大多数人最容易混淆的方式。总结中会介绍

* 分辨的方法。因为这种指针前面已经说过,这里不举例。

*/

int main(){

int *result;

pfunc=func;/*赋值*/

result=(int *)func();/*将void*转换成int**/

func();

pfunc();

return 0;

}

/*

* 编译上面这个程序,能够“正常”通过,但是会得到警告:返回了临时局部变量

* 地址,因为局部变量放在栈中,在函数结束时会被自动释放,如果你真的想要

* 在函数中使用局部变量来返回,那么可以使用malloc来分配内存地址,malloc

* 分配的内存属于进程的堆段,需要自己释放,或者程序运行结束后由C运行时

* 来释放。

* 最后,说说怎样区分下面这两个东东

*        char *func();

*        char (*func)();

*        记住函数()的结合性比指针*高,就可以很容易区分了,因为()高于*,所以

*        char *func()中的变量func是一个函数,进一步和普通函数char func()对比

*        你就可以将char *func()中的char *看成是有一个括号括起来了。而

*        char (*func)()中的func,由于加了括号,所以先和指针*结合,变成一个

*        指针,正如普通函数char function()中的function其实也是一个函数指针

*        一样,所以你可以将(*func)当成是一个普通变量。

*/

时间: 2024-10-10 15:21:45

返回指针的函数与指向函数的指针的用法的相关文章

【C语言】-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否

【C语言】14-返回指针的函数与指向函数的指针

前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头大了,不过我就暂时不在博客中讲解这些内容了,我只讲述在iOS开发中指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 回到顶部 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯

C语言 14-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略. 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头

C语言指针—————第二篇:指向另一指针的指针

本文转自 : http://c.biancheng.net/cpp/html/495.html  原文存在部分问题,现在已经修改,并重新发出来 一.回顾指针概念 早在本书第贰篇中我就对指针的实质进行了阐述.今天我们又要学习一个叫做“指向另一指针地址”的指针.让我们先回顾一下指针的概念吧!当我们程序如下声明变量:   short int i;   char a;   short int * pi;程序会在内存某地址空间上为各变量开辟空间,如下图所示: 图中所示中可看出:   i 变量在内存地址5的

学习笔记之14-返回指针的函数与指向函数的指针

一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变量的指针 1 // 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 3 char * upper(char *str) { 4 // 先保留最初的地址.因为等会str指向的位置会变来变去的. 5 char *dest =

c++不允许指向常量的指针赋值给不指向常量的指针

#include <iostream> using namespace std; class A { public: int i; int j; } int main() { const A* a = new A(); A* a1; a1 = a; } 这个是有道理的,能够这么做的话,const中内容就会被改变.

指向函数的指针与返回指针的函数

字面看就可以看出二者的区别,指向函数的指针即指针指向的地址为某个函数,而返回指针的函数为某个函数返回值是指针. 下面具体说: 1.指向函数的指针 bool (*ptr)(int a); 解析:声明指针ptr,指向的函数带有一个int形参,并返回bool型变量.注:*ptr两边的括号是必须的.否则如下: bool *ptr(int a); 为返回指针的函数,函数名ptr,参数为int 返回bool型指针变量. 2.指向函数的指针的初始化 只能通过0或者同类型的函数或函数指针进行初始化.可以用函数直

C语言基础学习6: 指向函数的指针

1.函数指针变量调用函数 1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b);

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括