标题:C语言初级指针问题
只看楼主
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
以下是引用人_神在2013-8-2 22:12:18的发言:

字符串"hello",存放在代码段,地址是不会改变的,函数返回的是a的内容,a的内容是字符串的首地址(在代码段),所以程序是对的。char* fun(void)是函数返回的是内容,而其内容内容是地址。这是我个人理解,有不对的地方,请指出。

那你考虑过局部变量释放没?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-02 22:35
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
以下是引用幽灵X在2013-8-1 22:27:00的发言:

有图有真相。你可以设断点跟踪变量。

指向的地址不会变,但是指向的地址存放的内容是会改变的...程序长了以后肯定会被数据污染

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-02 22:36
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
我错了,C和C++在编译期间会为常量分配全局常量空间,只有在程序退出才会释放
但是char* p = "hello"是错误的写法
楼主的写法是错误的

一:C语言中的内存机制
在C语言中,内存主要分为如下5个存储区:
(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。
(2)堆(Heap):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收。
(3)全局区/静态区(Global Static Area): 全局变量和静态变量存放区,程序一经编译好,该区域便存在。并且在C语言中初始化的全局变量和静态变量和未初始化的放在相邻的两个区域(在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没有区分了)。由于全局变量一直占据内存空间且不易维护,推荐少用。程序结束时释放。
(4)C风格字符串常量存储区: 专门存放字符串常量的地方,程序结束时释放。
(5)程序代码区:存放程序二进制代码的区域。


[ 本帖最后由 peach5460 于 2013-8-2 22:58 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-02 22:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
我去,字符串hello是常量,在常量区,即使子函数返回,也不会释放,所以没问题。

总有那身价贱的人给作业贴回复完整的代码
2013-08-02 22:58
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
回复 13楼 peach5460
兄弟说楼主写法的错误指的是什么?

总有那身价贱的人给作业贴回复完整的代码
2013-08-02 23:05
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
回复 15楼 embed_xuel
一个字符串常量赋给char* p不是一种错误的写法么?

"hello"是一个const指针
char*只是指针,赋值会发生类型转换...
会出异常...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-03 06:43
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
回复 16楼 peach5460
嗯,是的。而且这种错误编译器只给warning

总有那身价贱的人给作业贴回复完整的代码
2013-08-03 07:30
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
回复 17楼 embed_xuel
而且char*给人一种可以赋值的感觉...但是实际上给p赋值时,会报错...
而且编译期间还编译不出来...


[ 本帖最后由 peach5460 于 2013-8-3 09:05 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-03 09:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-418434-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135757 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved