| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1093 人关注过本帖
标题:指针函数问题
只看楼主 加入收藏
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
结帖率:70.59%
收藏
已结贴  问题点数:10 回复次数:18 
指针函数问题
给位大侠,看了一段时间的指针之后,有些问题不太明白,希望大侠帮我解释疑惑。。非常的感谢!!!

float saerch(float (*pointer),int n)
{
 float *p;
  .
  .
  .
 return (p);
 }

问题一:
上面的函数为例:一个函数可以返回一个指针地址值吗???   内存中地址值和实值有什么区别 ?(地址值和实值的存储都是以某种相同的格式存在的吗? 比如说都是二进制)
问题二:定义一个函数之后 他是怎么方式给一个函数分配的内存的?
搜索更多相关主题的帖子: 二进制 return 
2012-08-19 18:37
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
一个函数可以返回一个指针地址值吗???
可以

内存中地址值和实值有什么区别 ?
都是变量 一般认为没有区别


地址值和实值的存储都是以某种相同的格式存在的吗?
计算机里都的东西是二进制

定义一个函数之后 他是怎么方式给一个函数分配的内存的?
对于代码或者说指令 可以认为是操作系统或者是C运行时负责分配的罢
对于数据 比如int a; 这样的a 是函数分配的 属于堆栈 具体的分配方法你得学汇编才能懂

关于你这个程序 可以是对的可以是错的

float saerch(float (*pointer),int n)
{
    float *p;
    float aa;
    p = &aa;
    return (p);
}
上面这个是错的 错在返回栈内存


float saerch(float (*pointer),int n)
{
    float *p;
    p = malloc(sizeof(float));
    return (p);
}
上面这个的对的 因为返回的是堆内存 具体你看书就知道了

也就是说 能返回 但返回的对不对看你这个指针指向的数据在哪 如果是堆 就对 如果是栈 一般是错的

最后一句某版主的名言 不要把指针神圣化

诶 貌似关于指针的问题我都能答上来 嘻嘻


[ 本帖最后由 zklhp 于 2012-8-19 18:49 编辑 ]
2012-08-19 18:47
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:1 
地址值都是整形的,它所指向的内存就不一定是整形撒!还是建议你先去看下c语言的内存的书,你把堆,栈,代码段,数据段分别是存什么样的数据就ok啦,祝你学习进步
2012-08-19 18:51
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
                        a (a是int a[i]的首地址)
                        |
                        |
float saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}
这样有问题吗?
2012-08-19 18:55
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
C语言的内存的书籍  我是一个初学者,也不知道需要看那学书籍。能推荐一本适合初学者看的C的内存分配的书籍。  
2012-08-19 18:57
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用飘青在2012-8-19 18:55:39的发言:

                        a (a是int a的首地址)
                        |
                        |
float saerch(float (*pointer),int n)
{
    float *p;
    p=pointer+1;   
    return (p);
}
这样有问题吗?

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:07
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:1 
Z版
你跨版了。。
2012-08-19 19:08
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用Alar30在2012-8-19 19:08:30的发言:

Z版
你跨版了。。

没法啊 汇编版拿分太难了 这里分多
2012-08-19 19:08
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
我的前提是 我定义的不是一个返回指针值函数。而是一个普通的自定义函数
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:15
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
这个函数好像和您刚才刚才讲的
float saerch(float (*pointer),int n)
{
    float *p;
    float aa;
    p = &aa;
    return (p);
}
错误是一样的吗 ?
2012-08-19 19:18
快速回复:指针函数问题
数据加载中...
 
   



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

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