鱼C论坛

 找回密码
 立即注册
查看: 2088|回复: 4

求解答这段神奇的代码

[复制链接]
发表于 2018-11-12 09:12:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 saoqing 于 2018-11-14 13:59 编辑

//Main.c文件

#include<stdio.h>


void print(int n)
{
        printf("%d\n", n);
}

int* print2(int n, int m, char a)
{

        printf("print2 %d\t%c\n", n+m,a);
        //char c = a;
        int n1 = n;
        return &n1;
        //return &n;
}
int main() {
        //funParn("int-int-int","");
        fun(10, print2);
        return 0;
}

//test.c文件
#include<stdio.h>
#include < stdarg.h>

typedef (*P)();

void fun(int n, P print)
{
        int i;
        for (i = 0; i < n; i++)
        {       
                char a = 'a';
                double r;
                int *q;
                q=print(i,i,a);
                r = i + i;
                if (*q == i)
                {
                        printf("====");
                }
                printf("%d\n", *q);       
                a++;
        }
}




为什么在main.c中直接return &n
和在main.c中将n的值赋给n1再return &n1
两个结果不一样

第一张图是return &n1
第二张图是return &n

捕获2.PNG n1




捕获1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-12 09:24:30 | 显示全部楼层
你返回&n1是n1的地址,n1在你定义的时候内存给他分配了新的地址,你要是想用别的变量来接受,必须要用指针变量,这样才能存储数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 17:27:39 | 显示全部楼层
首先,发现这个问题与以下知识有关:全局与局部变量;&取地址符号与指针函数的内存
开始:int* print2(int n, int m, char a)是创建的一个int型指针函数,对应的你在里面创建的变量n1是一个属于指针函数里的一个局部变量作用范围和生存周期都是受限的;
return &n1,返回的是局部变量n1的地址值,但是你的结果却是0~9:在我的认知里来讲一个全局变量的地址返回出来这应该会要报错的,但是你却返回出来了,这就有点不明白了
return &n,返回的是全局变量n的地址值,所以一直是5635004
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-14 13:52:58 | 显示全部楼层
前路 发表于 2018-11-12 17:27
首先,发现这个问题与以下知识有关:全局与局部变量;&取地址符号与指针函数的内存
开始:int* print2(int ...



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-14 13:54:49 | 显示全部楼层
本帖最后由 saoqing 于 2018-11-14 14:00 编辑
前路 发表于 2018-11-12 17:27
首先,发现这个问题与以下知识有关:全局与局部变量;&取地址符号与指针函数的内存
开始:int* print2(int ...


不好意思,之前发的贴子有误,已改正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表