题目:下面这个函数有什么错误?(注释是我加的)char* Test(const char *str)
{
static char m_str[MAX_N]; //m_str是static的,分配在静态存储区,不在堆,函数结束依然有效
strcpy(m_str,str); //拷贝!MAX_N是足够大的
return m_str; //返回静态存储区的指针(虽然不提倡这样,不过应该没有错误的)
}上面是我的分析~!有错误吗??高手指点一下!!!
{
static char m_str[MAX_N]; //m_str是static的,分配在静态存储区,不在堆,函数结束依然有效
strcpy(m_str,str); //拷贝!MAX_N是足够大的
return m_str; //返回静态存储区的指针(虽然不提倡这样,不过应该没有错误的)
}上面是我的分析~!有错误吗??高手指点一下!!!
解决方案 »
- 密钥与密匙有啥区别?
- GDI+ 绘制背景的疑问
- __CxxUnhandledExceptionFilter使用
- RasSetEntryProperties怎么使用
- 副线程悬挂后出了问题
- KeySwap这个软件是怎样实现改变按键的..或者大家有什么好的方法实现按键修改(在vc中)!!!![→→→→→→标题要长→→→→→→→→→→→]
- 高分求救!如何在已打开的Word程序中,插入字符,设置字体。
- luxser收藏夹_1_常用网址
- 怎样在对话框的picture控件中应用自定义的鼠标指针?
- 谁有VC图像处理识别的源码啊
- 比较两个数组元素的变化 有没有更好的算法
- SMS 做好了,正在做 GPRS 系统,有些难题,有经验的兄弟能否留下联系方式,共同交流
你这个注释有点问题。函数内部的static申明的静态变量,只在该函数内部有效。下次调用该函数时,还是这个值,但到了函数外部,未必可以使用这块空间。说未必,是因为我没有写过这样的代码。
原因正如楼主所说“既然是静态的!~其生命期并不会随函数结束而结束!!”
(去翻ISO C++白皮书)
任何支持ISO C++的编译器都应该能跑通
而且这种static做法虽然不那么优雅,但是有些时候不失为一种解决办法。
另外,鹦鹉说:
你这个注释有点问题。函数内部的static申明的静态变量,只在该函数内部有效。下次调用该函数时,还是这个值,但到了函数外部,未必可以使用这块空间。说未必,是因为我没有写过这样的代码。
========
“函数内部的static申明的静态变量,只在该函数内部有效。”
这是鸟人喝醉酒后发的侉话,大家不别介意^_^
面试时是问我有什么错误!!我说应该没有!不过考官未置可否我想将这个帖提交FAO!!大家觉得怎么样??
顶!!!!!!!!!!!!!!!!!!
其实这个也是c/c++ 当中使用最灵活的指针的一种特殊用法,用它可以突破一些框架的约束的比如,一个类的私有变量都可以用指针的方法来获取的比如:
class A {
private:
int a;
public:
....
}
在没有虚函数的情况下, 获得A的实例的地址的第一个元素就是a的地址,把A指针转换成int类型,就可以完成对a的访问这看似和c++类对象的私有性的亵渎,但是也可以看作是c++指针灵活性的体现指针是c++的优势,也是它最不安全的地方
c#当中对它就有了不同的处理了