| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 870 人关注过本帖, 1 人收藏
标题:跨函数使用内存问题
只看楼主 加入收藏
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
结帖率:95.92%
收藏(1)
已结贴  问题点数:10 回复次数:5 
跨函数使用内存问题
#include<stdio.h>
void f(int**q)
{
    int i=5;
    *q=&i;//*q=p=&i;
}
int main(void)
{
    int *p;
    f(&p);
    printf("i=%d\n",*p);
    return 0;
}
我这样理解可以吗?为什么说这个程序语法没错,逻辑有问题?
搜索更多相关主题的帖子: return 
2016-06-16 18:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
i是局部临时对象
2016-06-16 19:02
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:6 
不知道你问的内存问题是什么意思。
程序代码:
#include<stdio.h>
void f(int**q)
{
    int i=5;
    *q=&i;//*q=p=&i;
}
int main(void)
{
    int *p;
    f(&p);
    printf("i=%d\n",*p);
    return 0;
}

int **q;int *p; *q=&p;   
int **q;int i=5; *q=&i;
上面基本是指针赋值的形式
参考上面的基本赋值,可以延伸到函数调用。
 int *p;
    f(&p);//指针p用来做f(int **q)函数的实参.f(int **q)中的参数是形参.

但有一个问题:  
f(&p);
printf("i=%d\n",*p);
指针p做为实参传递给f()函数,由于楼主写的f函数并未返回值。因此,f函数执行完毕后,不会返回临时变量值。
如果楼主需要在主函数中调用f函数的返回值,应该这样定义f函数
程序代码:
int f(int**q)
{
    int i=5;
    *q=&i;//*q=p=&i;
    return *p;
}


在main数中,需要声明一个指针保存f函数返回的值。
int *temp;
temp=f(&p);
然后再打印temp


以上讲的是函数参数调用与返回的形式过程,细节点楼主自行思考并解决。
关于这部份知识,楼主可看c primer plus和c与指针  这两本书。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-06-16 19:22
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
收藏
得分:0 
回复 3楼 lanke711
你的回答真仔细,谢谢了

慢慢调试
2016-06-16 20:27
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
收藏
得分:0 
回复 3楼 lanke711
#include<stdio.h>
int f(int **q)
{
    int i=5;
    *q=&i;
    return  **q;//*q=p,**q=*p=i的内容;
}
int main(void)
{
    int *p;
    int temp;
    f(&p);
    temp=f(&p);//地址是受限制的十六进制数,f(&p)接受的是地址,所以类型是int
    printf("i=%d\n",temp);
    return 0;
}
跨函数使用内存.exe - 0 error(s), 0 warning(s)
我自己摸索的,你所说的用*temp=f(&p)不能通过

慢慢调试
2016-06-16 21:19
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
收藏
得分:0 
我太菜了,大神所说听不懂

慢慢调试
2016-06-16 23:03
快速回复:跨函数使用内存问题
数据加载中...
 
   



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

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