回答編集履歴
3
前提が間違っていた。
answer
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
質問者より
|
2
|
+
|
3
|
+
> 言語はcです。今後はタグにcのみにします。strの型はcharです。
|
4
|
+
|
5
|
+
とのコメントを受けました。**下記の回答は前提が間違っていますので、無視してください。**
|
6
|
+
|
7
|
+
---
|
8
|
+
|
1
9
|
実際に同じか試してみました。
|
2
10
|
|
3
11
|
質問文に詳しいコードがなかったため、前提として、下記であると推測しました。
|
2
誤字の修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
質問文に詳しいコードがなかったため、前提として、下記であると推測しました。
|
4
4
|
|
5
5
|
1. 質問にはCとC++の二つの異なる言語のタグがついています。C++は(一部を除いた)Cの拡張であり、Cについて聞きたいのであれば、わざわざC++のタグを付けると言うことはない判断しました。よって、Cの話ではなくC++に限定した話である前提とします。
|
6
|
-
2. 質問
|
6
|
+
2. 質問には`str`がどのような型であるかの情報がありません。strと言う名前からstring、つまり、文字列だと推測されます。C++で文字列を扱うのであれば`std::string`がもっとも妥当とおもわれるため、`std::string`であると判断しました。`str`は`std::string`であることを前提とします。
|
7
7
|
|
8
8
|
質問での推測が正しいか確認するために、下記のコードを用意しました。
|
9
9
|
|
1
`str + i`が抜けていた。
answer
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
std::string str = "abcdef";
|
31
31
|
std::size_t i = 1;
|
32
32
|
std::cout << *(str + i) << std::endl;
|
33
|
+
std::cout << (str + i) << std::endl;
|
33
34
|
std::cout << &*(str + i) << std::endl;
|
34
35
|
return 0;
|
35
36
|
}
|
@@ -38,7 +39,7 @@
|
|
38
39
|
それぞれの実行結果は下記にあるWandboxを確認してください。
|
39
40
|
|
40
41
|
* [上のコードの実行結果](https://wandbox.org/permlink/P4N6rq9V0dYTdQb1)
|
41
|
-
* [下のコードの実行結果](https://wandbox.org/permlink/
|
42
|
+
* [下のコードの実行結果](https://wandbox.org/permlink/Kl7O4ICoQ8iPtiU0)
|
42
43
|
|
43
44
|
見ればわかりますが、下のコードはコンパイルエラーになります。つまり、最初の前提で話を進めた場合、「同じであるという前にコンパイルエラーになる」が結論となります。
|
44
45
|
|