teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

編集

2021/02/18 17:02

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -47,4 +47,26 @@
47
47
  そしてchar* p = strchr(str, '\0');は文字列を検索する中でnullに当たったら、そのnullとなる「アドレス」を*pに渡す意味していますが、*pはアドレスの「数値」を受け取る変数なのに、なぜnullとなる「アドレス」を渡せるのかわかりません。**色々調べましたがそういうものだからという感じの説明が多く納得が出来ませんでした。
48
48
  個人的には先頭のアドレスを渡すのでchar p = strchr(str, '\0');が正しいと思っていました。
49
49
 
50
- プログラムに書いた黒い★の疑問と黒い太い線で書いた疑問に詳しく優しく教えてくださると大変ありがたいです。
50
+ プログラムに書いた黒い★の疑問と黒い太い線で書いた疑問に詳しく優しく教えてくださると大変ありがたいです。
51
+
52
+ 編集
53
+ ```
54
+ #include <stdio.h>
55
+ #include <string.h>int main(void)
56
+ {
57
+ char str[] = "12345""\0""67890";
58
+ char* p = strchr(str, '\0');/
59
+ printf("|%s|\n", str);
60
+ printf("|%s|\n", p + 1);
61
+ *p = '!';
62
+ printf("|%s|\n", str);
63
+ }
64
+
65
+ ```
66
+ をcやc++でデバックしたら、char* p = strchr(str, '\0');の部分が**charと*pになると思ったらchar*とpに分かれていました。**
67
+
68
+ 理由がわかりません。
69
+ なぜこのように分かれたのでしょうか?strchr(str, '\0');からの返り値のアドレスを受け取るためでしょうか?
70
+ また、char*型とはポインタ型のcharだとわかりました。しかし、だからなんだという感じで、ポインタ型のcharとはなんなのですが?
71
+
72
+ どうか基礎を固めたいのでどうかよろしくお願い致します。