社区
C语言
帖子详情
结果为什么不是1111?
lwy123
2010-04-12 02:11:18
#include "stdafx.h"
#include "iostream"
char* test()
{
char a[]="1111";
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *p=NULL;
p=test();
printf("%s",p);
return 0;
}
...全文
98
12
打赏
收藏
结果为什么不是1111?
#include "stdafx.h" #include "iostream" char* test() { char a[]="1111"; return a; } int _tmain(int argc, _TCHAR* argv[]) { char *p=NULL; p=test(); printf("%s",p); return 0; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zqlclj
2010-04-12
打赏
举报
回复
[Quote=引用 11 楼 ubuntulover 的回复:]
永远不要返回指向局部变量的指针
[/Quote]
+1
阿磊2013
2010-04-12
打赏
举报
回复
永远不要返回指向局部变量的指针
aozhi
2010-04-12
打赏
举报
回复
return后已经基址寄存器中保存的已经不再是这个堆栈段的段地址了。自然取不到这个段中的数据了。
hacker1125
2010-04-12
打赏
举报
回复
不能返回栈空间。
char* test()
{
char a[]="1111";//栈内容
return a;//a为局部变量,11111存在栈里面,这个函数结束,1111页就消失了。所谓获取到的是不确定的值
itxuls
2010-04-12
打赏
举报
回复
哎。。 学习中。。。
jogger007
2010-04-12
打赏
举报
回复
局部普通变量是放在栈里的,当你该函数执行完毕就会被系统回收。
所以返回地址指向不可预见的内容
OVER
cy330206
2010-04-12
打赏
举报
回复
楼主把数组声明在主函数里面就可以了,
因为函数开始的时候可以分配一定的内存,但是函数结束后,他里面声明的所有的变量都会被销毁
senr0816
2010-04-12
打赏
举报
回复
因为你返回的是数组a[]="1111"的首地址,而a[]的范围仅限于函数内,函数运行结束后数组所占内存即被释放
天亮后说晚安
2010-04-12
打赏
举报
回复
正解
[Quote=引用 2 楼 bitxinhai 的回复:]
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
[/Quote]
honemay
2010-04-12
打赏
举报
回复
因为a是在函数里分配的,是局部变量,你的函数返回的是a的地址
你p= test(),p指向的那块内存在test()函数销毁时也被释放了
所以你打印出来的是一些不定的东西
可以改成char* a = new char[10];
strcpy(a, "1111");
不过在p =test()后,要 delete p;
bitxinhai
2010-04-12
打赏
举报
回复
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
ArmStronger
2010-04-12
打赏
举报
回复
a被释放了,加个static就好了
计算机为什么使用补码?(讲的很详细)
转自:http://blog.csdn.net/pud_zha/article/details/7815109 计算机为什么使用补码?
为什么-1的补码是全1(
1111
1111
)?-128的补码是10000000?
归纳 二进制补码得名于下述规则:一个n位的数与其n位的相反数做无符号加法,结果为 2 n 2^n 2n,因此,x的相反数(或相补数)-x 等于 2 n − x 2^n-x 2n−x,或叫“二进制补码”。 以n=8位为例,1的二进制表示为...
C语言基础---1.比特位与字节的关系,二进制、八进制、十六进制之间的转换,内存为什么使用十六进制?
3.为什么一个字节是8位二进制,而不是其他数目?4.为什么引入八进制、十六进制?(1)二进制转换?(2)十六进制转换? 1.计算机为什么采用二进制? 因为二进制是在电路中最好控制的,只有1和0两种状态.代表接通和...
为什么Byte是8位,但是却只能表示到127,而不是255?
第一个问题:我们都知道一个二进制8位能表示的最大值是
1111
1111
== 255,但为什么最大表示到127?因为对于计算机来说,一个二进制的数字它的最高位是符号位,0表示正数,1表示负数。所以
1111
1111
表示的 -127, ...
为什么在Python中两个浮点数的运算结果会不精确?
为什么会出现这种情况呢? 分析: 计算机中只有0和1,所有数据在计算机中都是以0和1的形式存储的,在机器字长有限的情况下,浮点数(小数)的精度也是有限的。 举个例子: 假如用一个8位的变量表示-1—1之间的小数...
C语言
69,375
社区成员
243,076
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章