鱼C论坛

 找回密码
 立即注册
查看: 2431|回复: 3

[已解决]来自初学者的一个小问题

[复制链接]
发表于 2017-12-26 17:33:54 | 显示全部楼层 |阅读模式

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

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

x
听了小甲鱼的课之后头铁了一波  试了一次到底是不直接释放
于是便写了一下代码(错的)
#include"stdio.h"

int* m(int,int);

int* m(int x,int y)
{
        char str[]="sad";
       
        return str;
       
}

int main()
{
        int x=120,y=110;
       
        printf("%s",m(x,y));
       
        return 0;
}


发现的确释放了  输出的是空白
但是真的释放了吗?
#include"stdio.h"

int* m(int,int);

int* m(int x,int y)
{
        char str[]="sad";
       
        return str;
       
}

int main()
{
        int x=120,y=110;
       
        printf("%c",*m(x,y));
       
        return 0;
}

于是我把代码微改一波(错的)
发现可以输出's'


既然释放了那么应该也是空的呀   求解!!
最佳答案
2017-12-27 23:34:08
首先 你改的代码也是错的, 为什么 因为你定义的是一个int类型 函数 返回的是char  类型的数据  编译器肯定不会通过,
另外你说打印出了 东西,  随便定义一个 内存位置 都会打印出数据无非就是 是否乱码的问题罢了。

该   代码主要 是让你认知  c++ 中 变量的作用域 。

具体你打印出的 东西你 debug  查看下内存就知道了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-26 18:01:18 | 显示全部楼层
注:不要返回局部变量的指针。(局部变量的作用域只存在于函数内部)
如: 下面是错误的
#include <stdio.h>

char *getWord(char c);

char *getWord(char c)
{
        char str1[] = "Apple";
        char str2[] = "Bnana";
        char str3[] = "Cat";
        char str4[] = "Dog";
        char str5[] = "None";
        switch(c)
        {
                case 'A': return str1;
                case 'B': return str2;
                case 'C': return str3;
                case 'D': return str4;
                default: return str5;
        }
}

下面是正确的。
#include <stdio.h>

char *getWord(char c);

char *getWord(char c)
{
        switch(c)
        {
                case 'A': return "Apple";
                case 'B': return "Bnana";
                case 'C': return "Cat";
                case 'D': return "Dog";
                default: return "None";
        }
}

int main()
{
        char input;

        printf("请输入一个字符:");
        scanf("%c", &input);

        printf("%s\n", getWord(input));

        return 0;
}

如果你想返回的指针除了上面的字符串能这样,其它类型的都必须是外部传入,然后再用return 返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-26 18:42:15 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-12-26 18:01
注:不要返回局部变量的指针。(局部变量的作用域只存在于函数内部)
如: 下面是错误的
#include

麻烦您举个例子咯    脑袋已经被指针搞蒙了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-27 23:34:08 | 显示全部楼层    本楼为最佳答案   
首先 你改的代码也是错的, 为什么 因为你定义的是一个int类型 函数 返回的是char  类型的数据  编译器肯定不会通过,
另外你说打印出了 东西,  随便定义一个 内存位置 都会打印出数据无非就是 是否乱码的问题罢了。

该   代码主要 是让你认知  c++ 中 变量的作用域 。

具体你打印出的 东西你 debug  查看下内存就知道了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-29 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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