| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1093 人关注过本帖
标题:指针函数问题
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用飘青在2012-8-19 19:15:39的发言:

我的前提是 我定义的不是一个返回指针值函数。而是一个普通的自定义函数
float saerch(float (*pointer),int n)   这个才是我定义的函数,  float *saerch(float (*pointer),int n) 这个不是我定义的函数

我的原型是这样的;
float saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}

……
float a[5];
float *pa = search(a, n);
……


  

你明明返回了一个指针 但指针的返回值类型不是指针 你觉得那样好么
2012-08-19 19:23
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用飘青在2012-8-19 19:18:08的发言:

这个函数好像和您刚才刚才讲的
float saerch(float (*pointer),int n)
{
    float *p;
    float aa;
    p = &aa;
    return (p);
}
错误是一样的吗 ?

不一样诶 函数返回的时候栈内存释放 指向它的指针都失效了

如果你不明白 建议好好看书 书上应该讲过这些东西罢
2012-08-19 19:25
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
呵呵,我没有别的意思。 这两个的区别。 希望您帮我解答
一:
在主函数中
score[]={1,2,2}
float *p
p=search(score,2);

自定义函数中:
float saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}

二:
在主函数中
score[]={1,2,2}
float *p
p=search(score,2);

自定义函数中:
float *saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}
的区别?  我越看到后面疑惑越大。
2012-08-19 19:33
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用飘青在2012-8-19 19:33:02的发言:

呵呵,我没有别的意思。 这两个的区别。 希望您帮我解答
一:
在主函数中
score[]={1,2,2}
float *p
p=search(score,2);

自定义函数中:
float saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}

二:
在主函数中
score[]={1,2,2}
float *p
p=search(score,2);

自定义函数中:
float *saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}
的区别?  我越看到后面疑惑越大。

程序代码:
#include <stdio.h>

float saerch(float (*pointer),int n)
{
    float *p;
    p = pointer + 1;  
    return (p);
}

int main(void)
{
    float score[] = {1,2,2};
    float *p;
    p = search(score,2);
}



错误就在挂羊头卖狗肉 明明是返回指针 但函数定义的时候却说自己返回是是变量

Compilation started at Sun Aug 19 19:39:25

gcc aaa.c -Wall
aaa.c: In function 'saerch':
aaa.c:7:2: error: incompatible types when returning type 'float *' but 'float' was expected
aaa.c: In function 'main':
aaa.c:14:2: warning: implicit declaration of function 'search' [-Wimplicit-function-declaration]
aaa.c:14:4: warning: assignment makes pointer from integer without a cast [enabled by default]
aaa.c:13:9: warning: variable 'p' set but not used [-Wunused-but-set-variable]
aaa.c:15:1: warning: control reaches end of non-void function [-Wreturn-type]
aaa.c: In function 'saerch':
aaa.c:8:1: warning: control reaches end of non-void function [-Wreturn-type]

Compilation exited abnormally with code 1 at Sun Aug 19 19:39:25

看看编译器说了什么
2012-08-19 19:40
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
函数名前面的那个是返回值类型 返回值是int就 int a() 是指针就 int *a() 如果明明返回的是指针但你写int a() 应该是错的

这是函数的基本知识啊 如果你还疑惑马上看书罢

记得要结题哦 我觉得你的疑惑应该已经得到解答了
2012-08-19 19:45
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
谢谢您。。。。  
可能我前面提问的方式有点没有衔接好。  没有直接开门见山的说。 而是想到如果返回一个变量和返回一个指针变量值区别在哪里。
2012-08-19 19:52
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:1 
回复 5楼 飘青
邮件给我  我发你电子书
2012-08-19 19:56
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
您的电子邮件多少
2012-08-19 20:04
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用飘青在2012-8-19 19:52:10的发言:

谢谢您。。。。  
可能我前面提问的方式有点没有衔接好。  没有直接开门见山的说。 而是想到如果返回一个变量和返回一个指针变量值区别在哪里。

问的好 区别在哪 貌似没区别 都是返回了一个变量而已 如果说区别 那就是一个是返回了普通的变量 一个是返回了指针

因为指针比较复杂 和函数 内存管理等东西搅合在一起 更复杂了 所以 返回函数很有可能会出问题 这是C语言的特点或特性决定的 这个不知道算不算一个区别 返回普通变量出错的时候比较少


[ 本帖最后由 zklhp 于 2012-8-19 20:20 编辑 ]
2012-08-19 20:14
快速回复:指针函数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016932 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved