char* 意思

来源:百度知道 编辑:UC知道 时间:2024/06/02 20:58:09
char* getMonth(const int& monthNum);//函数声明
char* Date::getMonth(const int& monthNum)
{
static char* monthName[]= {"January","Frbruary","march","April",

"May","June","July","August","September","October","November","December"};
return monthName[monthNum-1];
}//函数定义
想问下char*在这里到底是什么意思.
这个函数是在Date类内部的一个函数,程序编译通过并且也能运行,我就是想搞明白这里char*是怎么回事.
补充:这个函数不能算是Date的成员函数,根据const的用法,如果是成员函数的话, 在函数声明部分const应该定在后面的.
看了Loonie的回答,多少明白了;但还有几个小问题:
1.根据这个函数来看,char*可以像int,double等变量类型那样放在函数定义或声明前面吗?
2.前面说过,这个函数是放在一个类里面的,那么它算是类的成员函数吗?如果算,那么为什么const 不放在函数声明后面.(书上的例子是:char* Date::getMonth( int monthNum) const;)(假设 这个是一个类的成员函数的声明)
3.Loonie的解释char*是个字符型指针,在声明字符型指针 数组monthName时为什么使用static,设为静态呢?或者说static在这里是什么作用?
4.string可以代表字符串,那么这里是否能用string来代替char*字符型指针?

你10分的悬赏,问了这么多问题是有点贪心哦。不过算了,还是全给你回答吧。
(1)这个当然可以,作为函数的返回值可以是任何类型,另外这个函数的返回值最好为const char*,意思是这个返回的指针是只读的。
(2)放在成员函数声明后面的const修饰符是防止该函数修改成员变量,至于需不需要加这个修饰符,要看你设计者的意图;
(3)static修饰的局部变量位于进程的静态数据区,也即是所谓的记忆变量,不会因为函数结束回收堆栈而销毁,你的getMonth不能返回一个指向已经销毁了的堆栈内存地址吧,这就是使用static的原因;
(4)string主要用于动态字符串数组,要使用它你需包含<string>头文件,在此例中使用string是不太合适的,当然你要强行使用也不是办不到,不过那岂不是舍简求繁?还是把string的使用方法给你写一下吧,完整的测试代码如下:

#include <string> // 包含此头文件
#include <iostream>
using namespace std; // 让名字空间std里面标识可见,不然所有用到std的标识前面
//都要加上std::才可以,如string需写为std::string, cout需写成std::cout, endl需写为std::endl
const char* getMonth(const int& monthNum)
{
static string monthName[] = {"January","Frbruary","march","April",

"May","June","July","August","September","October","November","December"};
return monthName[monthNum