プロが教えるわが家の防犯対策術!

const char* s1とただのchar s1の違いは、前者は文字列の入るメモリの位置を表し、後者は文字列そのもの、すなわち文字列abceとかを定義するのでしょうか?

A 回答 (3件)

>結果的に処理により文字コードになる1バイトの数値をcharにより扱えるわけでしょうか?



その通りですね。
データを文字として扱うかどうかは、プログラムを組む側の都合に委ねられるので、
char s1[] = "ABCDE";

char s1[] = { 0x41,0x42,0x43,0x44,0x45,0x00 };
は同じ内容になります。※16進数で0x41は文字コード'A'

http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
    • good
    • 0
この回答へのお礼

なるほど、同じ数値でも、intなら値として、charならば1文字ならば結果的に1文字の文字コードになる1バイトの値を、文字列ならば結果的に文字列になる文字コードになる何バイトの値として取り扱うとわかりました。

お礼日時:2020/06/22 19:50

>char*で文字列や文字の入るメモリの最初のアドレスを定義し、charは一文字の文字コードを扱うのでしょうか?



厳密には、1バイトで表わせる数値(符号付きなら-128~+127)が扱えます。
半角文字は1バイトなので、その認識で大丈夫です。
実際にプログラムを動かして体感するとより理解が深まるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
では、文字はcharにより、文字コードの数値ではなく、1バイトで表す数値で扱えるわけですね。
って事は文字コードそのものを扱う事はできないため、結果的に処理により文字コードになる1バイトの数値をcharにより扱えるわけでしょうか?

お礼日時:2020/06/22 14:40

constの有り無しは、上書き出来るか否かに関わってきます。


constを付けることによって、上書き出来なくなります(中身の変更不可)。

(例1)
const char s1[] = "ABCDE";
s1[0] = 'a'; // 上書き出来ないので、コンパイルエラーになります。

(例2)
char s1[] = "ABCDE";
s1[0] = 'a'; // 1文字目を'A'→'a'に書き換え(正常に動作します)

(例3)
char str[] = "ABCDE";
const char* s1;
s1 = str;
*s1 = 'a'; // 上書き出来ないので、コンパイルエラーになります。

パソコンで実行する場合はプログラムとデータは全てRAMに展開されるのですが、
組み込み機器(例えばプリンタのファームウェア等)ではプログラムとデータはROMに焼かれています。
constで宣言した文字列はROM上のアドレスを指すことになるので、当然書き込みできません(読み出しのみ)。
const無しならRAMにコピーした文字列のアドレスを指しますので、書き換え可能です。

<参考>
https://www.hiramine.com/programming/c_cpp/const …
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちなみに、char*で文字列や文字の入るメモリの最初のアドレスを定義し、charは一文字の文字コードを扱うのでしょうか?

お礼日時:2020/06/22 01:40

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