0からの、超初心者C++相談室

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室
2018/11/12(月) 15:33:07.21ID:uNoTWhhe
まずC#を覚えます
3デフォルトの名無しさん
垢版 |
2018/11/12(月) 15:41:29.72ID:D6ILV7Jx
>>1
2018/11/12(月) 16:05:28.85ID:JkRQG90v
C99に準拠したCプログラムってC++コンパイラで完全にビルドできますか?
2018/11/12(月) 16:09:07.07ID:Uo1L8t18
>>4
型キャストが必要な場合と、C++キーワードに引っかかるケースがあるから、コンパイルできるとは限らない。
2018/11/12(月) 16:21:58.14ID:Uo1L8t18
例えば、classという名前の変数がある場合は、C++ではコンパイルできない。
void *型の変数にint *の値をキャストなしに代入しようとすると、C++ではコンパイルエラー。
7デフォルトの名無しさん
垢版 |
2018/11/12(月) 16:35:33.39ID:D6ILV7Jx
>>4
C99モードにすればおk
$ gcc -Wall -std=c99 -lm round.c
2018/11/13(火) 08:18:22.77ID:0Ele5WZ8
>>5-6
ありがとうございます。
C99では未定義だがC++で定義・予約されている言葉なんかが引っ掛かってしまうんですね。
9デフォルトの名無しさん
垢版 |
2018/11/13(火) 18:41:26.33ID:90McxFB4
extern "C" {}って書いてる?
10デフォルトの名無しさん
垢版 |
2018/11/13(火) 21:54:10.86ID:RYrE2D9k
まずCから
Cも分かってないのにC++とかムリ
11デフォルトの名無しさん
垢版 |
2018/11/13(火) 22:08:24.41ID:bZ0HXQ7X
C99頃から互換性も無いし、別言語だからそうでも無いけど、どっちかと言うとCのprintfに影響受けてる言語の方が多いね。
どっち先に覚えても良いけど、Cのprintfは押さえておいた方がいい。
(ただ、経験的にC++のオブジェクト指向を覚えるにはJavaかC#から入った方がいいので、挫折したらそっちを一旦勉強する事を勧める)
2018/11/13(火) 22:32:00.82ID:qjyppvvr
今の最新の規格ならだいぶ使いやすくなってるはず
とりあえず変数にはconstを付けれ
2018/11/13(火) 23:50:04.90ID:kE0CzrCg
C++とJavaのオブジェクト指向って、なにが違うのでしょうか?
2018/11/13(火) 23:59:43.80ID:700gS9mA
>>13
C++は、new を付けたらポインタ型になるが、Javaはnewを付けたら参照型になる。
2018/11/14(水) 00:06:33.69ID:bV3/fRvw
>>14
JavaよりC++のほうが難しいといわれるのは、ポインタがあるからっていう意味合いが大きいんでしょうか?
2018/11/14(水) 00:19:07.08ID:XVbpx9nj
>>15
C++のポインタは癌だ。どこにでもアクセスできてしまうし、メモリーリークが起きる恐れがある。安全ではない。
チェック付きの配列とスマートポインタを使えば、少しは安全になるが、完璧ではない。
2018/11/14(水) 00:36:22.61ID:XVbpx9nj
まず、ポインタ変数の宣言が初心者殺し。
int* a, b;の場合、bはポインタではない。

関数ポインタはさらに文法が複雑すぎる。
関数ポインタ型の複雑さから逃れるには、typedefを使うとよい。
2018/11/14(水) 01:24:53.28ID:XVbpx9nj
ポインタ型をtypedefしまくった環境がWindowsのWin32 APIだ。
intを大文字でINTと書く。intのポインタをLPINTと書く。unsigned intをUINTと書き、そのポインタをLPUINTと書く。
基本的な関数型は全てtypedefで定義済み。

これなら、ややこしいアスタリスク記号(*)に戸惑う必要はない。
2018/11/14(水) 01:35:38.43ID:XVbpx9nj
型を大文字で書くと分かりやすいという意味で、Win32ではよく使うポインタ型を全て大文字で定義している。
char *にはLPSTRを、const char *にはLPCSTRを用意している。
2018/11/14(水) 03:03:41.18ID:aCPH/+gx
なんてことを昔の人は考えたが、当然スマートポインタのほうがより安全である
21デフォルトの名無しさん
垢版 |
2018/11/14(水) 07:23:04.49ID:XWwMTSMS
>>15
>>14じゃ無いけど、個人的にはfriendクラスとかJavaには無いクラス同士の関係があったりするが最初はそれがどう言う関係か理解出来なかった。
Javaでオブジェクト指向に慣れた後理解出来た。
C++はそう言う独特のオブジェクト指向があるので、まずそこまで複雑じゃ無いオブジェクト指向言語で慣れる方がC++独特のオブジェクト指向の理解に繋がる。
22デフォルトの名無しさん
垢版 |
2018/11/14(水) 11:35:25.78ID:zVp4oIsl
>>18
無駄に覚えることを増やす馬鹿言語

wsとかswとか_sとかいっぱいつけやがってシッチャカメッチャカ
23デフォルトの名無しさん
垢版 |
2018/11/14(水) 11:36:41.07ID:zVp4oIsl
あとtypedefしてる型を型チェックのときに同一とみなすのが意味ない
せっかく型を別けてるのに
24デフォルトの名無しさん
垢版 |
2018/11/14(水) 12:34:52.66ID:OvTvaibz
整数を定義するときって以下の3つだとどれがメモリ消費量とか実行速度の面で一番効率いいですか?

#define XXX (1234)
enum{ XXX = 1234};
constexpr int XXX = 1234;
2018/11/15(木) 08:07:09.42ID:HNIzCpqS
効率は実測が基本
26デフォルトの名無しさん
垢版 |
2018/11/15(木) 12:16:37.45ID:lNkjj0jr
>>24
今時のコンパイラならどれも同じになるだろうけど、#defineはただの置き換えだから、実質直接数字に置き換える。
お馬鹿なコンパイラなら、これが一番速い。
(メモリ上のXXXに格納された1234をレジスタに読むのじゃ無く、レジスタに直で1234と書き込むので、メモリアクセス分は速い)
2018/11/15(木) 17:16:40.52ID:XHYJGLe7
constexprが候補に上がる時点で最新のコンパイラだと思われる
2018/11/15(木) 22:39:39.09ID:jenSGLjX
AIの力でコンパイラの性能を上げるって可能ですか?
29デフォルトの名無しさん
垢版 |
2018/11/16(金) 09:32:03.61ID:37LYr8ZY
a = xxx;
a = yyy;

これは、二重定義になりますか?
3029
垢版 |
2018/11/16(金) 09:41:00.05ID:37LYr8ZY
解決方法として

a = ("xxx" && "yyy");

を考えているのですが、これで良いでしょうか?
31デフォルトの名無しさん
垢版 |
2018/11/16(金) 11:34:07.59ID:9iOixtPe
a[] = {xxx, yyy};
3229
垢版 |
2018/11/16(金) 11:52:01.81ID:37LYr8ZY
>>31
ありがとうございます!
33デフォルトの名無しさん
垢版 |
2018/11/20(火) 23:59:39.03ID:GRv3bnvn
up
34デフォルトの名無しさん
垢版 |
2018/11/21(水) 04:04:25.43ID:C09+uG2D
整数型とbool型を比較したり代入しようとしたときに警告かエラーを出す方法はありますか?
int i=5;
bool b=true;
i=b;
if(i==b)
if(i)
↑3行すべてでエラーなり警告なりを出してほしい
b=i;とif(b==i)は警告が出ます
環境はvs2017です
2018/11/22(木) 03:29:53.66ID:by2crdt6
C/C++ではありえません。不可能です。
2018/11/22(木) 06:04:18.72ID:94o8kAxO
>>34
C++のboolのサイズはcharと同じだから
b=i: で警告になるのは整数型と論理型の変換というより単にサイズの小さい方に
代入しようとしたから警告になるてことだろうね

boolを使わずに Booleanクラスとかを自分で作れば型変換の許可/不許可も自在だけど
ま、やらんわな。そんな非効率なことは
2018/11/24(土) 11:20:27.36ID:pkYVxqhq
34です
遅くなりましたがありがとうございます
自作クラスを作ってまでエラー出したいものでもないので気にしないことにします
2018/12/02(日) 21:29:56.53ID:jrjT9DL9
MSがC++をCより勧める利点ってなんでしょう。
.NET関連で商売する為にC#などの利用を推奨するのは理解できるのですが
C++に拘りC99にすら対応しないのは何かよっぽどの理由があるのかなと思ってしまいます。
39デフォルトの名無しさん
垢版 |
2018/12/03(月) 21:46:10.27ID:ZMLOrV5M
.net以前はMFCで商売してたからね。
その遺産を保守するのにC++が必要。

今でもそう言う会社相手に商売してる。
今はまだマシだけど、開発環境独占だと標準規格無視してた。
対応しなくても売れるのに、対応する必要は無いわな。
40デフォルトの名無しさん
垢版 |
2018/12/03(月) 21:49:11.54ID:jYfXM2LM
御開帳です



http://connect.uh-oh.jp/
41デフォルトの名無しさん
垢版 |
2018/12/05(水) 04:20:50.45ID:yf36y6mU
enum EN { yama,kawa}
をアクセスする規則がわかりません。 EN.yama の時もあれば 単にyamaの
時もあります。規則はどうなってるんでしょうか?
42デフォルトの名無しさん
垢版 |
2018/12/05(水) 14:48:45.83ID:2sSegHBZ
namespace
2018/12/05(水) 23:17:47.17ID:P1XQw2I4
C++ならEN.yamaはあり得ないだろう
44デフォルトの名無しさん
垢版 |
2019/01/09(水) 10:11:37.02ID:Gyfngzmc
新年記念up
45デフォルトの名無しさん
垢版 |
2019/01/11(金) 18:31:10.60ID:TUR+WyZ1
win16からwin32への移行では役に立ったのかもしれない。
2019/01/22(火) 13:59:06.16ID:owIFG1wt
ゼロが流行っているのか?
47デフォルトの名無しさん
垢版 |
2019/08/28(水) 20:07:30.06ID:Y6mSCMlM
Cは習わないとダメですか?
2019/08/29(木) 10:03:19.38ID:Pek3Dpqo
c++相談室だぞ
習わなくていいなんて答えるヤツはいないぞ
2019/08/30(金) 20:54:35.96ID:QpJdGFlG
いやCの勉強なんてしなくていいよ
最初からC++の勉強をすればいい
50デフォルトの名無しさん
垢版 |
2019/08/31(土) 00:49:34.53ID:y5ewqimO
C++は糞
Cだけやっとけば充分
2019/08/31(土) 21:44:16.76ID:r57d4Puh
C++って便利になってもゴチャゴチャしてて汚い言語だとどっかで聞きました
2019/09/01(日) 01:17:32.77ID:6J4Ocwbf
ゴチャゴチャだと?
無理して拡張された機能を使わなければいいだけの話じゃないか
C言語でオブジェクト指向プログラミングをしようとするとどれだけ危険で汚くなるか分かってるんだろ?
C++は表面的にだけどそれをきれいにまとめた点だけでも評価されていいんじゃないか?
53デフォルトの名無しさん
垢版 |
2019/09/01(日) 01:34:32.37ID:sYwYgS29
つまりテンプレートを使うなということですね判ります
2019/09/21(土) 17:36:37.24ID:BnEC5IrG
c++は元はクラス形オブジェクトシステムを高速に動作させる為に始めたけど
今は単に高速にする事を目的に作っている様に見える
その為に一度に出来る様な記述を追加していってて有る意味便利なんだけど
機能が増えすぎて正確に把握するのが大変
その影響で何処か間違うとその間違った部分とは違う部分が違ってて
それを理解するのが大変
あちこちが絡みすぎてて言語自体がスパゲッティになってる印象
大量の事項を正確に覚えてそれられを正しく組み合わせないといけないから大変
超初心者にはかなりきつい
プログラミング初心者がやる様な物ではない
ある程度他のプログラミング言語をやって出来るようになってからの方が多分良い
55デフォルトの名無しさん
垢版 |
2019/09/21(土) 17:40:00.07ID:icgczTg/
>その影響で何処か間違うとその間違った部分とは違う部分が違ってて
>それを理解するのが大変

「何処か間違うとその間違った部分とは違う部分が違っててそれを理解するのが大変」
はその通りだが

「その影響で」
は関係無い
大変なのは今に始まったことじゃない
高機能ωになる前からずっとそう
2019/09/22(日) 09:05:21.83ID:Ktt7KEB9
この板にはC++委員会で多くの人が使いにくいと思っている仕様を提案してしまった
人が来ているので、最新のC++がダメになった、などと言うのは禁句。
2019/09/22(日) 18:46:16.43ID:tiYbs1p9
>>52
STLに関しては、コンテナ以外の部分を使わなければ、かなりスパゲッティー感が
なくなる。C++98以降、STLの実装にしか使わないような template の機能強化
に邁進してしまったようだ。しかし、C++ reference などで STL がふんだんに
使って説明されてしまってるので若い人の間で STL が C++ の標準だと
思われてしまい、そこが難しいので C++ が嫌われる結果となっている。
本来はライブラリはプログラミングが簡単になることを目的にしているはずなのに、
STLはその逆を言ってしまっている。
問題なのは、STLを使いまくったC++コードがネット上に増えてしまっていること。
2019/09/22(日) 19:24:43.32ID:vTpi5vA1
奥が深いからね
ショウガナイね
2019/09/22(日) 19:40:18.23ID:+tHa6qta
STLのコンテナ以外の部分とか自作template使わないとプロ感出ないからね
仕方ないね
2019/09/23(月) 09:41:06.71ID:9Vk3Qf6P
言語仕様を一通り学んだ後でライブラリの詳細な使い方を覚えていけるのが理想。
ところが、cppreference では、言語仕様を本文だけでは説明し切れておらず、
サンプルコードを見てやっと理解できるようになっているが、そこで
非常に難解なSTLの使い方をしてしまっている。それでは
STLの非常に詳細な仕様を知らないとSTLの基礎となっている言語仕様すら
理解できないことになり、ある種の「トートロジー」のような現象が起きてしまう。
前段階の理解を元に三段論法的に論理や理解を進めていくという説明の仕方になっていないのだ。
そのやり方が C++ が難解であるというイメージを植えつけてしまっている。
cppreference の執筆者やC++委員会の上の方の人の中に、STLをC++の言語
それ自体だと思っている人がいるように思えてならない。
確かにPythonやRubyでは、似たような機能を持つものが、言語そのものの一部
である位置づけになっている。しかし、その理解はとても容易である。
だから、言語仕様を説明するサンプルコードがその理解を前提にしていたとしても、
理解の妨げにはならない。ところが、C++ではその事情は一変するのだ。
61デフォルトの名無しさん
垢版 |
2019/09/23(月) 11:55:25.99ID:3qdqqJ07
codecvtですね判ります
2019/09/23(月) 12:36:29.52ID:9Vk3Qf6P
>>60
正確には、トートロジー というより、循環論法に近い。
2019/09/23(月) 13:25:24.38ID:IaDL9t/N
>>60
たとえば cppreference のどの記事のことを言ってるんですか?
1つか2つでもいいんで、具体例がほしいです。
2019/09/23(月) 14:28:50.02ID:9Vk3Qf6P
>>63
もしかしたら >>60 の説明は「ずれて」いたかもしれないけど、例えば、言語仕様の
サンプルコードに高頻度に vector が出てくるので、それ自体がどうやって実装されているかを
調べることも重要になってくる。すると、initailizer-list なるものが重要であることがわかり、
vector の実装でそれがどう関係しているかも知りたくなる。それを知る前にまずは、vector template
の細かい仕様を調べたくなり、以下を見るとする:
https://en.cppreference.com/w/cpp/container/vector

↑は冒頭部分からしてこうなってる:
template<
 class T,
 class Allocator = std::allocator<T>
> class vector;
(1)
namespace pmr {
 template <class T>
 using vector = std::vector<T, std::pmr::polymorphic_allocator<T>>;
}
(2) (since C++17)
1) std::vector is a sequence container that encapsulates dynamic size arrays.
2) std::pmr::vector is an alias template that uses a polymorphic allocator

これは、初心者には難しすぎるし、実装を調べたいような上級者には情報が不足しており、
「帯に短し襷に長し」状態である(ちゃんとした説明になっていないのだ)。
上の部分を見た場合、最初に、allocator とはなんなのか、ということが疑問になる。
そして、allocator を調べなくてはならなくなる・・・・。

まず、vector とは何なのかが大まかに知りたかった人にすら、これでは難しい。
例えば、Ruby なら、[a,b,c] は、リストといって、集合です、と説明して
わずかなサンプルでもその全体像が分かった気がしてくる。
それとは全然違うことになってしまっている。
2019/09/23(月) 14:39:03.51ID:9Vk3Qf6P
>>64
誤:initailizer-list
正:initializer-list

vector の仕様を調べようとすると、(1),(2)の2つの定義が出ており、(2)では
なぜか、namespace pmr が出てきて、さらに、using vector = ・・・、で
vector という名前が alias で定義されているらしい。基礎の基礎を知りたくて
vectorを調べたのに、namespace と using alias が出てくる。そして、pmr
という namespace がいったい何なのかということを知る必要が出てくる。

まず説明に言葉が足りてない気がする。英語は曖昧さを含み易い言語らしく、
英語に強い人に聞いても「文脈でどっちとも取れるので正確な意味は分からない」
と言われる。日本語に比して言葉の意味が薄くて、サンプルコードが重要となる。
IntelのCPU命令のマニュアルだと、擬似コードで説明されている事があり、
その場合にはほぼ正確に言っていることが分かるが。cppreferenceはそれもない。
ほぼ、サンプルコードだけが頼りになっているが、そのサンプルも分かりにくい。
サンプルに対する英語の説明が少なすぎるから。
2019/09/23(月) 15:02:06.71ID:9Vk3Qf6P
>>64
時々、「コードこそがドキュメント」などという人がいて、それに従って
cppreferenceが書かれてしまっている可能性がある。しかし、vectorの
「仕様」とは、vectorが如何に実装されているかではなく、如何に使うか
の説明から入るべきなのに、>>64は、実装をモロに見せてしまってるから
難しくなっている。(1)のtemplate文だけでは、templateの仕様がまだ理解できてない
段階では、vectorの仕様を知ることが出来ないことになる。そう書くよりも、
いきなり、

std::vector<int> v = {7, 5, 16, 8};  // (100)

で、4つの整数型の要素を持つ配列を確保します。
メモリ上で要素は、隣り合わせに並びます。
配列の長さは動的に変更することが出来ます。

と書いたほうが良いし、完全な referece を書きたい場合でも、>>64 の(1)のように
書くべきではなくて、例えば、(100)を一般化して

[vector 型オブジェクトの作成方法]
std::vector<int> オブジェクト名 = 初期化子;  // (101)
 初期化子 := {初期値リスト}

などと書かないいけない。

>>64 の (1)は、vector自体の「実装方法」を書いているだけで
vectorの「仕様書」にはなっていない。
67デフォルトの名無しさん
垢版 |
2019/09/23(月) 15:16:09.23ID:3qdqqJ07
なるほど
それならトートロジーとか循環論法と言うよりも
もっと適切な言葉があるはず
2019/09/23(月) 15:21:18.30ID:9Vk3Qf6P
>>66
集合や、データベース系のソフトウェアでは、言葉は忘れたが、
初期化、追加、削除、参照、検索、個数の取得
などが良く使われる(ほぼ必須の)基本機能だとされるから、

[vector 型オブジェクトの作成方法]
std::vector<要素の型> オブジェクト名 = 初期化子;  // (200)
std::vector<要素の型> オブジェクト名 初期化子;  // (201)
 初期化子 := {初期値リスト}

[vector 型オブジェクトへの末尾への要素の追加]
オブジェクト名.push_back(要素);         // (210) 要素をコピーして追加したい場合
オブジェクト名.push_back(std::move(要素));   // (211) 要素を移動して追加したい場合

[vector 型オブジェクトの idx 番目の要素の参照]
オブジェクト名[idx]    // (220) : idx は先頭が 0 から始まる。
・・・

などと書いていけばよい(自分は細かい仕様が分かってないのでこれ以上詳しくは
書けないが、reference manual を書く人なら書けるはず)。
初心者が期待する reference manual とは上記のようなもので、
>> 64 のようなものではない。何度も言うが、>>64
実装と仕様が混合されてしまったもので、どっちつかずの状態になっている。
69デフォルトの名無しさん
垢版 |
2019/09/23(月) 15:26:14.73ID:3qdqqJ07
ソースから自動生成してるなら仕方ない面もある
70デフォルトの名無しさん
垢版 |
2019/09/23(月) 23:08:32.79ID:MNSCG3IB
実装で仕様が隠蔽されている
2019/09/23(月) 23:52:06.90ID:U2/CMzYE
大きい・小さいとか、言葉は、about で抽象的だから、
こんな厳密な事を決めるのには、向いていない

図解・サンプルの方が、圧倒的に理解しやすい。
だから、下の3冊などは、神の書と呼ばれる

サンプルを示すことで、OK/NG というのがハッキリわかるから!

C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
Linux プログラミング・インタフェース、Michael Kerrisk、2012

理解できないような事を書いている、香具師が悪い。
そういうのを追っかけても、時間の無駄

プログラミング・フレームワーク・構造がわかるためには、Ruby でもやった方が余程よい。
C/C++ などポインタのある言語は、プログラミングを学ぶのに適していないし、
バグで時間を浪費するから、結局学べないw
2019/09/30(月) 10:42:32.26ID:6yDcPDBq
なるほどね
初心者にとっては
一度に多くのことを覚えないといけないのは負担が多い
生配列を使うのは良くないから最初からvectorを教えるのは
有る意味正しいけど
理解するには難易度が上がってしまっている

オブジェクト指向プログラミングでも同じ様な感じで
例の
動物クラスから継承して犬猫クラスを作ってワンニャン
とかの説明とかが良く有るけど
機能の説明としてはそれでいいんだけど
実際にそういう風には作らない(別にそういう風にやりたきゃやってもいいけど)
実際上は別な構造として作ったりするんだけど
その別なやり方をどうするのか?という説明が殆ど無いので
オブジェクト指向は糞
みたいな話になってくる
唯一の例題として有るのが
デザインパターン
だと自分は思っているが
あれを意味が無い
とか言っている人が結構居て
そのせいで軽視されているのが残念というか問題だと思ってる
初心者が手がかりにするのは難しい面も有るけど他に良さそうな例題が余り無い

適切な教科書を作る
というのは結構高度で大変で
作れる人が少ない
その割には作った人には余り金にならなかったりして
作ってくれる人が余り居ない印象
73デフォルトの名無しさん
垢版 |
2019/09/30(月) 12:08:38.76ID:vkIGDak2
gcc も g++ も VC も肥大化し過ぎた
digital mars c とか Borland C 5.5 かそれよりもっと前
tiny c compiler でもいい
初心者用にはもっとシンプルな C で充分
2019/10/06(日) 17:06:30.65ID:42LxT2AQ
quick c
2020/03/26(木) 16:08:19.66ID:71CdUQnj
>まず説明に言葉が足りてない気がする。英語は曖昧さを含み易い言語らしく、

英語は抽象意味言語だから指している範囲がザックリしてて
短い文章とかだと何を言っているのか解らない
その分覚えておかないといけない分量が少なくて良い
英語から日本語に自動翻訳を掛けても上手く翻訳されていない時はその文章が何の分野で有るか解らないから間違っている様に見えると感じる

日本語は一つの意味を指している事が多いけど覚えておかないといけない分量が多いから大変だけど
その分広い範囲の意味を指していないのでちゃんと使うと意味が一点を指して誤解し難い

けどプログラムを書く時は
javaだととりあえず.を書いておけば良いから迷わないけど
c++だと.だったり->だったり::だったりするから迷う事がある
そんなに致命的な問題では無いけど
76デフォルトの名無しさん
垢版 |
2020/03/27(金) 14:39:56.26ID:9RtDMjhb
::あんまり使わないな
2020/05/06(水) 18:31:54.91ID:K0jT0mUL
入門ロベールC++の188ページに

const char* MONTH_NAME[]={"睦月,"如月,"弥生"......  
というのがあるのですが、なぜchar*型の前にconstをつけると文字列リテラルをたくさん代入出来るのでしょうか?
const定数を外すと同じことが出来ないのがよく分からないです。ポインタが理解できてないのでしょうか。
2020/05/06(水) 18:38:37.65ID:wd9+jhuU
それの場合MONTH_NAMEの型は
「書き換えられないchar」「へのポインタ」「の配列」
であることがわかれば後はわかるっしょ
2020/05/06(水) 18:46:19.97ID:K0jT0mUL
>>78
すいません、分からないです・・・
何が分かってないからこうなってるのか。も分かってないからまた読み直して同じページに戻っても理解できないです・・
2020/05/06(水) 19:06:59.66ID:8YawtAIF
>>77
文字列リテラルの指す文字列は書きかえてはいけない。
char* の指す先の文字列は書きかえできる。
const char* の指す先の文字列は書きかえできない。
2020/05/06(水) 19:07:03.19ID:K0jT0mUL
何故文字配列なのに文字列を沢山入れられるのか…
2020/05/06(水) 19:09:49.04ID:8YawtAIF
>>77
あーわかった。あんたがエラーメッセージを読んで理解しようとしないから分からないんだよ。
2020/05/06(水) 20:16:45.31ID:K0jT0mUL
分かりません。
ポインタを直接文字列の値で初期化してるのもよくわからないです。
2020/05/06(水) 20:38:11.69ID:5oVnKxXT
char *s = "abc"; がダメな理由と
int a[] = { 1, 2, 3 }; がOKな理由を考えろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況