![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
初歩的な質問なんですが、
#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;
}
の部分がどうしても理解できません。
参考書にも、解説が載ってなくて困っています。
ご教授宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは
ポイントだけ説明します。
while(*p){ ←最初はssの先頭の"A"が入っていれ"E"まで繰り返します。
*p=*p+1; ←最初は"A"の文字コードに1を足したので"B"になります。以下同様
++p; ←文字の処理するポインタを1更新する為、次の文字を扱うようになります
}
No.4
- 回答日時:
while(*p){
*p=*p+1;
++p;
}
は下記と処理内容は等価です
for (long lLoop = 0;;) {
if (p[lLoop] == 0) break;
p[lLoop] = p[lLoop+1];
lLoop++;
}
No.3
- 回答日時:
今晩は!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言語は、このポインターが理解できれば、また先が見えてきます。
頑張りましょう!!
参考URL:http://www02.so-net.ne.jp/~hat/imail/img/asciitb …
No.2
- 回答日時:
*p=*p+1;
は分解すると、演算子の優先順位より、
*p = (*p) + 1;
となります。
この時点で左辺の*pは&ss[0]を指しています。つまり代入先の場所です。
次に、右辺の「(*p)+1」はgould09さんの説明の通り、'A'に1をたす作業、
つまり、0x41 + 0x01 = 0x42 'B'となるわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
C言語の変数(LSB)の合わせ込...
-
【Excel VBA】繰り返し処理がで...
-
matchesを否定文として使う方法...
-
java nビット目を読み取る
-
UINT64→UINT32[2]にする方法
-
ArrayListの要素数の上限
-
日付型の入力値チェック
-
hiddenの値を消したくない!
-
素朴な疑問
-
String str = "a\\\\b\\\\c";
-
実行シェルからCOBOLへパラメー...
-
struts ActionFormについて
-
DateTimePickerに値を入れたい...
-
CASL(CASL2)でこんな問題が...
-
ResultSetの内部構造(Java)
-
結合した文字列をファイル名に...
-
wsprintf関数の使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
DateTimePickerに値を入れたい...
-
C言語の変数(LSB)の合わせ込...
-
JSPでHashMap・配列の変数の値...
-
matchesを否定文として使う方法...
-
JSPでの計算結果表示
-
hiddenの値を消したくない!
-
結合した文字列をファイル名に...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
long型に値を代入したい。
-
【Excel VBA】繰り返し処理がで...
-
Stringクラスの変数の格納アド...
-
PSQLExceptionが発生する
-
ResultSetの内部構造(Java)
-
String str = "a\\\\b\\\\c";
おすすめ情報