a1296715528 发表于 2017-12-26 17:33:54

来自初学者的一个小问题

听了小甲鱼的课之后头铁了一波试了一次到底是不直接释放
于是便写了一下代码(错的)
#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'


既然释放了那么应该也是空的呀   求解!!

ba21 发表于 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 返回

a1296715528 发表于 2017-12-26 18:42:15

ba21 发表于 2017-12-26 18:01
注:不要返回局部变量的指针。(局部变量的作用域只存在于函数内部)
如: 下面是错误的
#include


麻烦您举个例子咯    脑袋已经被指针搞蒙了

新建word 发表于 2017-12-27 23:34:08

首先 你改的代码也是错的, 为什么 因为你定义的是一个int类型 函数 返回的是char类型的数据编译器肯定不会通过,
另外你说打印出了 东西,随便定义一个 内存位置 都会打印出数据无非就是 是否乱码的问题罢了。

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

具体你打印出的 东西你 debug查看下内存就知道了!
页: [1]
查看完整版本: 来自初学者的一个小问题