2017-07-07 2 views
1

私は、特定の値を持つポインタを返すように最善を尽くしています。しかし、私はなぜ私がいつもよりも多くの文字を得ているのを理解していません。私はいくつかの人に尋ねたところ、部分文字列を取得していると言われましたか?ポインタ戻り値の型に対して一連の文字を返すのはなぜですか?

問題:hotdogという単語を入力します。 私はインデックス[2]にポインタを返すことを期待しています。代わりに、私は文字の犬を取得します。何故ですか?どうすればインデックス[2]を得ることができますか?逆参照について考えていますが、戻り値の型をうまく動作させるには問題があります。

私の関数の戻り値の型やパラメータを変更することはできません。

#include <iostream> 

char * GetValueAtIndex(char * const c, int index); 
void ReadString(char * c, int length); 

int main() 

{ 
    const int size = 10; 
    char ma[size]; 
    char * pointer = ma; 

    ReadString(ma, 20); 
    std::cout << GetValueAtIndex(pointer, 3) << std::endl; 
    system("pause"); 
} 

void ReadString(char * c, int length) 
{ 
    std::cin.getline(c, length); 
} 


char * GetValueAtIndex(char * const c, int index) 
{ 

    return c + index; 

} 
+0

は、なぜあなたは期待しないインデックス[2 ]? GetValueAtIndexはインデックス3のインデックス3を使用し、 "hotdog"の4番目の文字は 'd'なので、出力が 'dog'になると期待します。 –

答えて

0

ポインタ戻り値の型に対して一連の文字を返すのはなぜですか?

あなたは何をしようとしているかとまったく同じように、文字へのポインタを返します。

私はインデックスのポインタを返すことを期待

[2]

あなたが期待通りにポインタが、返されたこと。

代わりに、私はchars dogを取得します。

これは、ポインタをストリームに挿入したためです。 char*のストリーム挿入演算子では、入力がヌル終了文字列へのポインタである必要があり、その動作はその文字列全体を出力することです。あなたのポインタは、文字'd'から始まる文字の配列を指しています。あなたはポインタ参照解除、あなたは('d')に指摘されている文字を取得する場合、私は逆参照考えています

はそれが

std::cout << *GetValueAtIndex(pointer, 3) << std::endl; 
3

ないポインタ値を返すために、あなたの関数を変更します。あなたのようchar*ポインタを持っている場合

std::cout << *GetValueAtIndex(pointer, 3); 

:関数によって返されたポインタデリファレンス

char GetValueAtIndex(char * const c, int index){ 
    return *(c + index); 
} 

または単に:

char* p = "Hotdog"; 

に送信し、pstd::coutに送信すると、Cスタイルの文字列(の最初の文字)として扱われ、そのように表示されます。 Cスタイルの文字列の最後は\0です。それで、pが指している文字が何であっても、残りの文字はすべて、\0の文字列の終わりに達するまで表示されます。あなたはそれがその後、次の文字などを指し示すポインタをインクリメントした場合 :あなただけの単一の文字を印刷する必要がある場合は

char* p = "Hotdog"; 
p++; 
std::cout << p; 
p+=3; 
std::cout << p; 

、その後でpポイントがstd::coutに間接参照ポインタを送信します。

char* p = "Hotdog"; 
std::cout << *p; 
+0

私は質問を編集します。戻り値の型または関数のパラメーター。 – don1123

+0

@ don1123意味がない – Justin

+0

@ don1123そのインデックスの文字へのポインタを返すと、指定したコードのように印刷すると、 '\ 0'文字に遭遇したときにのみ終了します。文字列の終わりです。そのため、あなたの例の出力は 'd'だけでなく' dog'になります。 – Polb

関連する問題