函数内静态常量的用法 请高手指点

wylove 2005-08-17 09:18:24
一个如下的函数,返回一个对应索引的字符串:
const char* msg_to_user(int num_tries)
{
static const char* user_msgs[] = {
"Go on, make a guess. ",
"Oops! Nice guess but not quite it.",
"Hmm. Sorry. Wrong again.",
"Ah, this is harder than it looks, no?",
"It must be getting pretty frustrating by now!"
};

return user_msgs[ num_tries ];
}
请问,为什么user_msgs要用静态常量。为什么不定义为:
const char* user_msgs[] = { ...
或者
char* user_msgs[] = { ...

...全文
137 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wylove 2005-08-17
  • 打赏
  • 举报
回复
zousoft(菜菜鸟的战斗诗歌)回答的有道理,提高效率。

那么函数内声明的char* 类型是不是在栈中存储,还是在堆里面?
因为声明为char* user_msgs[] 也可以返回正确的值!
qfeng_zhao 2005-08-17
  • 打赏
  • 举报
回复
user_msgs[ num_tries ]返回的为一指向局部变量字符串得指针
如果不定义为静态变量,函数返回后,局部变量被释放
即user_msgs[ num_tries ]所指向的字符串就捕存在了。

所以一定要用静态变量,静态变量在函数作用域消失后,不会被释放
dch4890164 2005-08-17
  • 打赏
  • 举报
回复
一般情况下这都是为了提高效率,如果不是必要一般情况下我不用
hjf1010 2005-08-17
  • 打赏
  • 举报
回复
zousoft(菜菜鸟的战斗诗歌),你错了吧,你看函数返回的是什么???
如果不定义成static,肯定是有问题的
Atomictry 2005-08-17
  • 打赏
  • 举报
回复
如果是在.h文件中初始化,请尽量用static,没准你会想在其他很多文件中把它申明为全局,这时就会出重复定义错误。 如果就一处用到,加不加也无关紧要。
hjf1010 2005-08-17
  • 打赏
  • 举报
回复
在函数体内将变量定义为static,函数结束后变量不会消失,其后的代码可以用到它。
const类型的变量在函数调用结束后会自动消失的。
你可以看看代码有没有在别的地方用到这个变量
zousoft 2005-08-17
  • 打赏
  • 举报
回复
static无论你函数调用多少此,对象创建多少个,他都只有一个,而且不会受函数或对象生命期限制。换句话说,你可以把它当作全局变量理解。

具体到这个例子,我觉得不一定非要用static,但是它要用估计也是为了提高效率,因为
static const char* user_msgs[] = {
"Go on, make a guess. ",
"Oops! Nice guess but not quite it.",
"Hmm. Sorry. Wrong again.",
"Ah, this is harder than it looks, no?",
"It must be getting pretty frustrating by now!"
};
这段代码,只会调用一次,以后函数再被调用时,将会跳过。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧