C++ noobはこちら。私が読んでいるC++の本で見つけた構成について非常に基本的な質問があります。
// class declaration
class CStr {
char sData[256];
public:
char* get(void);
};
// implementation of the function
char* CStr::get(void) {
return sData;
}
したがって、Cstr::get
関数は明らかに文字ポインタを返すことを意図していますが、関数は値(return sData
)。 C++は、返されたオブジェクトのアドレスを返すことを知っていますか?私の推測では、関数の定義はreturn &sData
。
CおよびC++の場合、配列はポインターに分解されます。関数の値として配列を返すことはできません。ポインタのみを返すことができます。配列を返すことは、配列の最初の要素のアドレスを返すことと同じです。
return &sData[0];
C++は、返されたオブジェクトのアドレスを返すことを知っていますか?
この場合、はい。 配列の名前は、配列の最初の要素への定数ポインターです。そうするとき
char* CStr::get(void) {
return sData;
}
が実行されると、配列の最初の要素へのポインタが返されます。したがって、呼び出し元は配列を参照してトラバーサルを実行できます。次のコードを実行します。 「hello、world」という出力が表示されます。
#include <iostream>
#include <string>
class CStr {
char sData[256];
public:
CStr(std::string str);
char* get(void);
};
CStr::CStr(std::string str) {
if (str.length() >= 256) {
sData[0] = '\n';
return;
}
str.append("\n");
str.copy(sData, str.length());
}
char* CStr::get(void) {
return sData;
}
int main() {
CStr msg("hello, world");
char* str = msg.get();
while (*str != '\n')
std::cout << *str++;
return 0;
}