ここから本文です

C言語で質問なんですが "ABCDEF"という文字列定数のデータ型は何か とい...

osi********さん

2015/6/317:21:12

C言語で質問なんですが

"ABCDEF"という文字列定数のデータ型は何か


という課題が学校から出たのですが、意味が分かりません。


char型でよいのでしょうか?謎です。l¥

閲覧数:
190
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2015/6/321:07:16

char [7] という答えで良いと思いますよ。{'A', 'B', 'C', 'D', 'E', 'F', '\0'} こういう配列です。おしまいに '\0' がありますので7文字分です。

それとですね、まず違うとは思いますが、

char (&)[7]

というのもあり得るかも。関数を呼び出す時、一応、こういう型になりますよね。でもって、char* にもなる。あ、難しいですか?ですよね。なら、この話はナシ。

《備考》

文字列の中身を改変するとまずい事が起きます。多分。

*"ABCDEF" = 'X';

とか。でも、文法違反じゃないんだわ、これが。なぜかって言うと、 const じゃないから。const char [7] じゃないのですよ。非 const の char [7] なのです。

おかしいですよね。

歴史的な経緯でそうなっているのですよ。もともと、const なんて無かったので。あ、これも難しいですか?なら、知らなくても大丈夫。知らない人も7~8割居ると思う。(直感的な数字ですのでアテになりませんけど。)

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

2015/6/514:45:16

その文字列定数の「値」がconst char型へのポインタだ、ということを答えさせたいんじゃないでしょうか?

khurataさん

2015/6/513:13:41

C では全ての定数・変数・関数に型があります。

定数は型を伴う宣言をしませんが、「暗黙の型」が決められます。

たとえば

int a = 5;

という宣言では、=5 という代入をしていますが、この 5 という定数は暗黙的に int 型になっています。
だからコンパイルエラーや警告が出ないのです。

文字列定数の型は、C においては char[] です。
(ただし C++ では const char[] 型です)

ですから、下記のような代入や使用が可能になるのです。

char * b = "ABCDEF"; /* b は "ABCDEF" を格納した7バイト領域を指す */
char c[] = "ABCDEF"; /* c の各要素に1文字ずつ7要素入る */
/* 上記はいずれも終端文字 '\0' を末尾に含むので7バイト分となる */
printf( "%s", "ABCDEF" ); /* 型が合っていれば代入以外にも使える */

2015/6/317:24:28

¥0で終わるcharの配列でねえべかぁ?

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる