来自初学者的一个小问题
听了小甲鱼的课之后头铁了一波试了一次到底是不直接释放于是便写了一下代码(错的)
#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'
既然释放了那么应该也是空的呀 求解!! 注:不要返回局部变量的指针。(局部变量的作用域只存在于函数内部)
如: 下面是错误的
#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 返回
ba21 发表于 2017-12-26 18:01
注:不要返回局部变量的指针。(局部变量的作用域只存在于函数内部)
如: 下面是错误的
#include
麻烦您举个例子咯 脑袋已经被指针搞蒙了 首先 你改的代码也是错的, 为什么 因为你定义的是一个int类型 函数 返回的是char类型的数据编译器肯定不会通过,
另外你说打印出了 东西,随便定义一个 内存位置 都会打印出数据无非就是 是否乱码的问题罢了。
该 代码主要 是让你认知c++ 中 变量的作用域 。
具体你打印出的 东西你 debug查看下内存就知道了!
页:
[1]