アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語入門者です。
int str_length(const *s)
{
int len=0;

while(*s ++)
len ++;
return len;
}
この関数は配列を受け取り、その配列の長さを返す関数です。この関数でwhile(*s++)という処理がありますが、なぜこの場合sに間接演算子を用いるのでしょうか?s++でやると暴走します。私はsと*sの使い分けをはっきり理解していません。
具体的に教えてくださいm(_ _)m

質問者からの補足コメント

  • const char *sでした。

      補足日時:2018/06/30 23:57

A 回答 (5件)

>私はsと*sの使い分けをはっきり理解していません。


ポインタの勉強をしてみては?
https://qiita.com/lrf141/items/a3e96b315dd4f0850 …

そうすれば理解できると思います。
    • good
    • 0
この回答へのお礼

勉強していてつまずいたので、有識者に質問したのであります。
あくまでこれも勉強の一環です。

お礼日時:2018/06/30 23:58

これ、コンパイルできますか?


とおらない気がします。
コンパイラは *s を認識できないとおもうんですが。
    • good
    • 0

すいません。

逆におしえて欲しいのですが、const *s って書くとsは何バイトのデータポインタになるの?
    • good
    • 0
この回答へのお礼

charを書き忘れていました

お礼日時:2018/06/30 23:56

ふる~い C だと const *s を const int *s と解釈したりしますけどね>#3.



さておき, 「私はsと*sの使い分けをはっきり理解していません。」というなら, #1 でも言われているように「はっきり理解」すべきです... というか, これが理解できていない人間にどう説明しろと?
    • good
    • 0
この回答へのお礼

私は内部での処理を深く理解できていませんでした。(配列との相違など)ですが、誰も質問の本質に触れていただけませんでしたので、先程グラフィカルな説明をみて理解しました。
特に意味を持たない返信はやめていただきたい。現時点であなたは僕よりも優秀なのだから、自分が時間を無駄にしていることくらいわかっているでしょう。私もネガティブな感情になり、ストレスにしかなりません。お互いに利がないので余計なことはやめて下さい。C言語の先輩さん。

お礼日時:2018/07/01 00:32

であれば、sはメモリアドレスなので、開発環境のビット数(32bitなら、4バイト)のデータで、*sはそのアドレスの場所にある1バイトのchar型のデータです。


*s++は、うしろに++がついているので、*sでchar型のデータ中身をみた後で、sをsizeif(char)(つまり1バイト)だけインクリメントする(アドレスを後ろにずらす)ということです。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!