2017-06-21 33 views
-1

私はC++でコードを作成する方法を始めています。 私はC++プライマープラス(第5版)の本を読んでいて、完全に理解していないサンプルプログラムに出くわしました。基本的には、プログラムはあなたの最後の名前を尋ね、あなたにそれが格納されます場所のアドレスを与える:この機能はどのように機能しますか? char * getname(); C++

#include <iostream> 
#include <cstring> 
using namespace std; 
char* getname(); 
int main(); 
{ 
    char* name; 
    name = getname(); 
    cout << name << " at " << (int*)name << endl; 
    delete [] name; 

    name = getname(); 
    cout << name << " at " << (int*)name << endl; 
    delete [] name; 

    return 0; 
} 

char* getname() 
{ 
    char temp[80]; 
    cout << "Enter last name: "; 
    cin >> temp; 
    char* pn = new char [strlen(temp)+1]; 
    strcpy(pn, temp); 

    return pn; 
} 

私はかなり理由のchar *のgetName()関数を取得しない間接参照演算子を必要とします。私は全体的にこのプログラムを理解するのに少し苦労しています。 これは愚かな質問のように出てくる場合は申し訳ありませんが、私はかなり固執しています。それで全部です。ありがとうございました!..

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+3

オペレータ_のうちのどれを見つけるか?長い間逆参照はありません。 –

+2

戻り値の型が 'char'の場合は' * getname() 'ではありません。代わりに、 'getname()'と返り値の型は 'char *'です。詳細については、Googleの "C型宣言"(最初の結果はかなり良いです)。 –

答えて

0

name - これは最初の文字へのポインタです。 std::cout<< - あなたが彼に何を与えるかによって、動作が異なります。

  • シーケンスの最初の文字へのポインタ(char* name)場合 - coutこのシーケンスを印刷します。
  • int数へのポインタ場合 - メモリ内のこの数のcout印刷アドレス(0x1105010

(int*) - intへのポインタにキャストします。