社区
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;
}
...全文
113
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
作业
写回复
配置赞助广告
用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就好了
为什么-1的补码是全1(
1111
1111
)?-128的补码是10000000?
公式2^n-x
C语言基础---1.比特位与字节的关系,二进制、八进制、十六进制之间的转换,内存为什么使用十六进制?
文章目录1.计算机为什么采用二进制?2.为什么引入字节?3.为什么一个字节是8位二进制,而不是其他数目?4.为什么引入八进制、十六进制?(1)二进制转换?(2)十六进制转换? 1.计算机为什么采用二进制? 因为二进制是在电路中最好控制的,只有1和0两种状态.代表接通和关闭电路的状态 2.为什么引入字节? 1字节(byte,字节)= 8 bit 字节(Byte /bait/ n. [C])是计...
为什么在Python中两个浮点数的运算结果会不精确?
问题描述: 在python中定义两个浮点型变量,值分别为1.1和2.2,两者相加并输出结果,结果并非为我们直观得到的3.3,而是趋近于3.3的一个小数值。 代码如下: n1 = 1.1 n2 = 2.2 print(n1+n2) 输出结果: 3.3000000000000003 为什么会出现这种情况呢? 分析: 计算机中只有0和1,所有数据在计算机中都是以0和1的形式存储的,在机器字长有限的情况下,浮点数(小数)的精度也是有限的。 举个例子: 假如用一个8位的变量表示-1—1之间的小数,8位的变量共有
为什么HashMap默认初始容量为2次幂?不是2次幂会怎样?讲讲 HashMap 扰动函数?
关于HashMap的详解文章请移步:链接: HashMap源码研究——源码一行一行的注释 通过看源码,我们发现,判断桶的索引的实现是 i = ( n - 1 ) & hash,其中 n 是 map 的容量。任何 2 的整数幂 - 1 得到的二进制都是 1,如:16 - 1 = 15(
1111
);32 - 1 = 31(
1111
1)而 n-1 与 hash 做的是与运算(&),与运算是 两个都为1,才为1既然我们的 n-1 永远都是 1,那 ( n - 1 ) & hash 的计算结果就是 低位的hash
为什么Byte是8位,但是却只能表示到127,而不是255?
第一个问题:我们都知道一个二进制8位能表示的最大值是
1111
1111
== 255,但为什么最大表示到127?因为对于计算机来说,一个二进制的数字它的最高位是符号位,0表示正数,1表示负数。所以
1111
1111
表示的 -127, 而 0111
1111
表示的是127,范围区间应该是[-127,127]之间。那么第二个问题来了第二个问题:我们都知道一个Byte能表达的数字范围是[-...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章