Q&A
解決済
3回答
926閲覧
総合スコア46
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。
配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。
0グッド
0クリップ
投稿2020/02/21 03:39
0
かなり初歩的なことなのですが、下記のソースコードにおいて一番上の文は配列の初期化、次の文は、ポインタの初期化を表していることはわかるのですが、1番下の文は文法的に正しいのでしょうか?また正しいならどんな意味をなしているのでしょうか。かなり変な質問だと思いますがよろしくお願いします。
c1char s[]="abcde"; 2char *s="abcde"; 3char s="abcde";
c
1char s[]="abcde"; 2char *s="abcde"; 3char s="abcde";
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
2020/02/21 03:42
回答3件
ベストアンサー
少なくとも現在の言語仕様上は間違っています。 現代の主要なコンパイラではエラーになるはずです。
古いコンパイラでは (処理系の拡張として) char s="abcde"; を通す場合もあり、その場合はポインタを char 型に暗黙に型変換をしていることになります。 ポインタと整数の間での変換がどうなるかというのは言語仕様上では規定していないので実際にどうなるかは言語処理系の裁量次第ですが、一般的にはポインタのビットパターンを整数として解釈してその下位 1 バイトを得るという処理になるでしょう。
char s="abcde";
char
あくまでも言語仕様の外のことですし、それが出来たところで普通は意味のあることが出来るとは思えません。
投稿2020/02/21 04:07
総合スコア5779
回答へのコメント
2020/02/21 06:35
すでに回答がついているのですが、質問文に気になるところがあります。
「一番上の文」とか「次の文」と言っていますが、これらは「文」ではありません。 char s[] = "abcdef"; は「宣言」です。
例えば、if文は「if (式) 文」という構文ですが、 if (a > 0) char s[] = "abcde"; はエラーになります。 「char s[] = abcde";」が宣言であって、文ではないからです。 C++ では、宣言は文になれるのでエラーになりません。
質問が文法的に正しいかどうかというものなので、指摘してみました。
また、質問に対して LouiS0616さんが「実際に試してみましたか?」と 尋ねていますが、こういうことにはきちんと返答しましょう。
投稿2020/02/21 08:02
総合スコア8222
1番下の文は文法的に正しいのでしょうか?
正しくありません。charをchar *で初期化する形となり、コンパイルエラーとなります。
char *
投稿2020/02/21 03:58
総合スコア146853
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
文字列とポインタについての初歩的な質問