Error[8]: Undefined offset: 14, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

指针作为函数的返回值

在C语言中,地址也可以作为一个返回值,被函数返回。

但值得注意的是,不能在实现函数时返回在函数内部定义的自动变量的地址。因为作为自定义函数的局部变量,在函数返回时就会自动消亡,其储存单元不再有效。

因此,返回指针的函数一般都返回主调函数或者静态存储区中变量的值,值得一提的是,在函数中是通过动态内存分配方式建立的内存单元,其地址也可以正常返回。

#include "stdio.h"
char *find(char *s,char ch);
int main(void)
{
    char ch,a[10];
    char *p;
    printf("please inter your word\n");
    scanf("%s",a);//%s会吸收换行符;
    getchar();
    printf("please inter your letter\n");
    ch=getchar();
    p = find(a,ch);
    if(p!=NULL)
    {
        printf("%s",p);
    } else{
        printf("Not found");
    }
    return 0;
}
char *find(char *s,char ch)
{
    while (*s!='定义格式:')
    {
        if(ch==*s)
        {
            return s;
        } else
        {
            s++;
        }
    }
    return NULL;
}

函数指针:

在c语言中,函数名代表函数的入口地址,可以定义一个指针变量,接受函数的入口地址,让它指向函数,这就是指向函数的指针,也叫函数指针。

 类型名(*变量名)(参数类型表);

在使用函数指针前,要先对它进行赋值,将一个函数名赋给函数指针,但要注意函数返回值的类型应该与函数指针的类型一致。

int (*p)(int int);

int fum(int int);

p=fum;

fum等价与*p

#include "stdio.h" #include "math.h" double f1(double x); double f2(double x); double calc(double (*p)(double ),double a,double b); int main(void) { double result; double (*p)(double ); result= calc(f1,0.0,1.0); printf("%f\n",result); p=f2; result= calc(p,1.0,2.0); printf("%f\n",result); return 0; } double f1(double x) { return (x*x); } double f2(double x) { return (sin(x)/x); } double calc(double (*p)(double ),double a,double b) { double z; z=(b-a)/2*((*p)(a)+(*p)(b)); return z; }

形式:int *p(int int);

函数指针与指针函数的差别

指针函数:是一个函数,其返回值为指针;

形式:int (*p)(int int);

函数指针:是一个可以指向函数的指针;

()的优先级是高于*的,所以在指针函数中,p会先和(int int)结合,形成一个函数。与数组指针与指针数组。

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
指针与函数_C_内存溢出

指针与函数

指针与函数,第1张

指针作为函数的返回值

在C语言中,地址也可以作为一个返回值,被函数返回。

但值得注意的是,不能在实现函数时返回在函数内部定义的自动变量的地址。因为作为自定义函数的局部变量,在函数返回时就会自动消亡,其储存单元不再有效。

因此,返回指针的函数一般都返回主调函数或者静态存储区中变量的值,值得一提的是,在函数中是通过动态内存分配方式建立的内存单元,其地址也可以正常返回。

#include "stdio.h"
char *find(char *s,char ch);
int main(void)
{
    char ch,a[10];
    char *p;
    printf("please inter your word\n");
    scanf("%s",a);//%s会吸收换行符;
    getchar();
    printf("please inter your letter\n");
    ch=getchar();
    p = find(a,ch);
    if(p!=NULL)
    {
        printf("%s",p);
    } else{
        printf("Not found");
    }
    return 0;
}
char *find(char *s,char ch)
{
    while (*s!='定义格式:')
    {
        if(ch==*s)
        {
            return s;
        } else
        {
            s++;
        }
    }
    return NULL;
}

函数指针:

在c语言中,函数名代表函数的入口地址,可以定义一个指针变量,接受函数的入口地址,让它指向函数,这就是指向函数的指针,也叫函数指针。

 类型名(*变量名)(参数类型表);

在使用函数指针前,要先对它进行赋值,将一个函数名赋给函数指针,但要注意函数返回值的类型应该与函数指针的类型一致。

int (*p)(int int);

int fum(int int);

p=fum;

fum等价与*p

#include "stdio.h" #include "math.h" double f1(double x); double f2(double x); double calc(double (*p)(double ),double a,double b); int main(void) { double result; double (*p)(double ); result= calc(f1,0.0,1.0); printf("%f\n",result); p=f2; result= calc(p,1.0,2.0); printf("%f\n",result); return 0; } double f1(double x) { return (x*x); } double f2(double x) { return (sin(x)/x); } double calc(double (*p)(double ),double a,double b) { double z; z=(b-a)/2*((*p)(a)+(*p)(b)); return z; }

形式:int *p(int int);

函数指针与指针函数的差别

指针函数:是一个函数,其返回值为指针;

形式:int (*p)(int int);

函数指针:是一个可以指向函数的指针;

()的优先级是高于*的,所以在指针函数中,p会先和(int int)结合,形成一个函数。与数组指针与指针数组。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/722919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存