OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ポインタと配列

  • すぐに回答を!
  • 質問No.185660
  • 閲覧数31
  • ありがとう数0
  • 気になる数0
  • 回答数4
  • コメント数0

初歩的な質問なんですが、

#include <stdio.h>
#include <string.h>

main()
{
char ss[10];
char *p;

strcpy(ss,"ABCDE");
p=ss;

while(*p){
*p=*p+1;
++p;
}
printf("ss=%s\n",ss);
}

で実行結果が

ss=BCDEF

になります。

while(*p){
*p=*p+1;
++p;
}

の部分がどうしても理解できません。
参考書にも、解説が載ってなくて困っています。
ご教授宜しくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 33% (196/589)

こんにちは


ポイントだけ説明します。

while(*p){ ←最初はssの先頭の"A"が入っていれ"E"まで繰り返します。
*p=*p+1; ←最初は"A"の文字コードに1を足したので"B"になります。以下同様
++p; ←文字の処理するポインタを1更新する為、次の文字を扱うようになります
}
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル12

ベストアンサー率 41% (324/772)

*p=*p+1; は分解すると、演算子の優先順位より、 *p = (*p) + 1; となります。 この時点で左辺の*pは&ss[0]を指しています。つまり代入先の場所です。 次に、右辺の「(*p)+1」はgould09さんの説明の通り、'A'に1をたす作業、 つまり、0x41 + 0x01 = 0x42 'B'となるわけです。
*p=*p+1;
は分解すると、演算子の優先順位より、
*p = (*p) + 1;
となります。
この時点で左辺の*pは&ss[0]を指しています。つまり代入先の場所です。
次に、右辺の「(*p)+1」はgould09さんの説明の通り、'A'に1をたす作業、
つまり、0x41 + 0x01 = 0x42 'B'となるわけです。
  • 回答No.3
レベル11

ベストアンサー率 33% (131/392)

今晩は!gould09さんが回答されていますが、もう少し、詳しく見てみましょう! 参考のURLのアスキーコード表を見ますと、 文字Aのアスキーコードは16進で0x41です。 文字Bのアスキーコードは16進で0x42です。 ・・・・・ p=ss; でポインターpは配列ss[0]を指します。 その内容はAです。コードは0x41です。 *p=*p+1; この文の説明です。 右辺の* ...続きを読む
今晩は!gould09さんが回答されていますが、もう少し、詳しく見てみましょう!

参考のURLのアスキーコード表を見ますと、

文字Aのアスキーコードは16進で0x41です。
文字Bのアスキーコードは16進で0x42です。
・・・・・
p=ss;
でポインターpは配列ss[0]を指します。
その内容はAです。コードは0x41です。

*p=*p+1; この文の説明です。
右辺の*p+1は、ポインターの内容Aの値(*p==0x41)に1を加えます。
従って、右辺の内容はB(0x42)となり、
その値を*pに代入しますから、*pはB(0x42)となります。

その値を表示していますから、
ssの先頭はBとなっています。
(ss=BCDEF)

++p;はポインターを一つ進めますので、ss[1]を指します。

while(*p){はポインターの内容がNULLになるまで繰り返します。

C言語は、このポインターが理解できれば、また先が見えてきます。
頑張りましょう!!
  • 回答No.4
レベル8

ベストアンサー率 51% (21/41)

while(*p){ *p=*p+1; ++p; } は下記と処理内容は等価です for (long lLoop = 0;;) {  if (p[lLoop] == 0) break;  p[lLoop] = p[lLoop+1];  lLoop++; }
while(*p){
*p=*p+1;
++p;
}
は下記と処理内容は等価です
for (long lLoop = 0;;) {
 if (p[lLoop] == 0) break;
 p[lLoop] = p[lLoop+1];
 lLoop++;
}
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ