エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
523デフォルトの名無しさん
2018/10/23(火) 11:21:13.83ID:1h9PfZX9 多分、変数yの型が省略されているから、
デフォルトのintと推定して処理しているのだろう
デフォルトのintと推定して処理しているのだろう
524デフォルトの名無しさん
2018/10/23(火) 12:10:40.16ID:joSIbJ7d ここ内容C++なんだけど何で化けてるん
http://www.booran.com/menu/cplus/ope_overload.html
http://www.booran.com/menu/cplus/ope_overload.html
525デフォルトの名無しさん
2018/10/23(火) 12:26:32.22ID:0c85p6oM >>522
ありがとうございます。
ということは*がついてる変数は、変数がアドレスのときはそのアドレスに収納されてる値を指し、変数がアドレスに収納されてる値のときは、そのアドレスを指すという理解でよろしいんでしょうか?
ありがとうございます。
ということは*がついてる変数は、変数がアドレスのときはそのアドレスに収納されてる値を指し、変数がアドレスに収納されてる値のときは、そのアドレスを指すという理解でよろしいんでしょうか?
526デフォルトの名無しさん
2018/10/23(火) 12:51:45.73ID:wh2qZljY >>525
違うよ。
型名の一部としての*と、式の中の演算子としての*が別物だと言うのは分かる?
1行目の方は「intをさすポインタ」という型を表すためのもの。
2行目は「xというint型の変数の値に対して、その値が指しているメモリ領域上にあるint型の値を参照する」という演算を行うというもの。
違うよ。
型名の一部としての*と、式の中の演算子としての*が別物だと言うのは分かる?
1行目の方は「intをさすポインタ」という型を表すためのもの。
2行目は「xというint型の変数の値に対して、その値が指しているメモリ領域上にあるint型の値を参照する」という演算を行うというもの。
527デフォルトの名無しさん
2018/10/23(火) 13:02:04.09ID:LNtdy1l4 この変数はポインタです 宣言の *
ポインタで指している先の内容を得ます 式の *
ポインタで指している先の内容を得ます 式の *
528デフォルトの名無しさん
2018/10/23(火) 13:13:20.29ID:d9/C5RHb C++コードの部分を間違って読み込んだとか?
エンコードはEUC-JPだね
エンコードはEUC-JPだね
529デフォルトの名無しさん
2018/10/23(火) 14:23:01.94ID:LNtdy1l4 Firefox だと右上メニューからエンコーディングで明示的に EUC-JP 指示で化け解消
(unicode にチェックが入ってたが、自動だとそっちに誤爆判別してた?)
Chrome での明示的なエンコーディング変更は拡張プラグインつっこまないとできないっぽい
(unicode にチェックが入ってたが、自動だとそっちに誤爆判別してた?)
Chrome での明示的なエンコーディング変更は拡張プラグインつっこまないとできないっぽい
530はちみつ餃子 ◆8X2XSCHEME
2018/10/23(火) 16:21:42.79ID:L3KABBTH C/C++ のポインタの表現が分かり難いってのは確かにあると思う。
宣言のときも * は変数名の側にくっついているものと考えれば理解しやすいんじゃないかな。
int * x; と宣言したとき、 *x が int であるような x を宣言したことになる。
宣言のときも * は変数名の側にくっついているものと考えれば理解しやすいんじゃないかな。
int * x; と宣言したとき、 *x が int であるような x を宣言したことになる。
531デフォルトの名無しさん
2018/10/23(火) 16:53:31.99ID:yFsvvFWj Cの頃は
int *hoge;
と書くことが多かったのに、
C++になってから
int* hoge;
と書く人が増えた。
悪い習慣だと思う。
int *hoge;
と書くことが多かったのに、
C++になってから
int* hoge;
と書く人が増えた。
悪い習慣だと思う。
532デフォルトの名無しさん
2018/10/23(火) 17:02:30.81ID:oFF/C26V Javaとかから入る人が増えたからかね?
その習慣はあかん。
ポインタは型じゃないから、例えば
int* a,b;
って書くとaは「int型のポインタ」で、bは「int型の変数」になる。
その習慣はあかん。
ポインタは型じゃないから、例えば
int* a,b;
って書くとaは「int型のポインタ」で、bは「int型の変数」になる。
533デフォルトの名無しさん
2018/10/23(火) 17:05:53.09ID:J7zWeAP4 ハゲのせい
534はちみつ餃子 ◆8X2XSCHEME
2018/10/23(火) 18:09:41.43ID:L3KABBTH >>532
いや、そこらへんは C/C++ のおかしなところで、ポインタはあくまでも型だ。
その上で文法上は * は変数名の側と結合するの。
もういっそ
std::add_pointer<int> a, b;
のスタイルを普及させればいいんじゃないのかなーと思う。
C++ だとなるべくスマートポインタを使う習慣が出来つつあるから、
その記法とも一貫性があるし。
いや、そこらへんは C/C++ のおかしなところで、ポインタはあくまでも型だ。
その上で文法上は * は変数名の側と結合するの。
もういっそ
std::add_pointer<int> a, b;
のスタイルを普及させればいいんじゃないのかなーと思う。
C++ だとなるべくスマートポインタを使う習慣が出来つつあるから、
その記法とも一貫性があるし。
535デフォルトの名無しさん
2018/10/23(火) 19:19:19.30ID:6eYDBZzc536デフォルトの名無しさん
2018/10/23(火) 19:36:08.31ID:ArZ/Inm7 型変換は (型)式 と書くわけで型を単体で書く書き方はあるのに変数宣言は
型 変数[, 変数]...
じゃないからねえ
void f(void);
void (*f_ptr)(void) = f; // ふむ
void (*g_ptr)(void) = (void(*)(void)) f; // 関数ポインタ型の記法はこうか…
void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!
みたいな
型 変数[, 変数]...
じゃないからねえ
void f(void);
void (*f_ptr)(void) = f; // ふむ
void (*g_ptr)(void) = (void(*)(void)) f; // 関数ポインタ型の記法はこうか…
void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!
みたいな
537デフォルトの名無しさん
2018/10/23(火) 19:49:01.78ID:36KTqSlz 初期化リストで二次元配列を0で初期化したいときはどう表記したら良いですか?
538デフォルトの名無しさん
2018/10/23(火) 20:01:35.24ID:ArZ/Inm7 初期値式リストの個数が足りない場合残りの要素は0で初期化されるので
int a[5][6] = {};
でok
int a[5][6] = {};
でok
539デフォルトの名無しさん
2018/10/23(火) 20:47:58.43ID:ZxbJzPkh >>538
CやC++では、ゼロクリアされるのか。されないと思っていたが
CやC++では、ゼロクリアされるのか。されないと思っていたが
540デフォルトの名無しさん
2018/10/23(火) 21:45:29.42ID:1rFbBQfH >>539
Cはされないだろ
Cはされないだろ
541デフォルトの名無しさん
2018/10/23(火) 22:10:00.30ID:cC1ZIpo7 初期化値リストをつければ足りないところは0で埋められる
付けなければ初期化されない
太古から変わらない仕様
付けなければ初期化されない
太古から変わらない仕様
542デフォルトの名無しさん
2018/10/23(火) 22:13:12.65ID:HIyGo7BY あ、でも c だと空の初期化リストは書けないから {} じゃなく {0} にしなきゃダメか
543はちみつ餃子 ◆8X2XSCHEME
2018/10/24(水) 00:07:31.69ID:PadB6FUj >>535
変数宣言の基本的な形式
型指定子 宣言子1, 宣言子2, …;
で言うと * は宣言子の一部ということになるが、
型指定子でないから型 (の一部) ではないというわけではない。
これは文法上の呼び名に過ぎず、
意味論的にはポインタは型の一部だよ。
変数宣言の基本的な形式
型指定子 宣言子1, 宣言子2, …;
で言うと * は宣言子の一部ということになるが、
型指定子でないから型 (の一部) ではないというわけではない。
これは文法上の呼び名に過ぎず、
意味論的にはポインタは型の一部だよ。
544デフォルトの名無しさん
2018/10/24(水) 00:25:51.42ID:shD/xjVg 視点の問題ではあるが宣言の構文上のポインタは型の種類ではなく入れ物の種類ともいえる
int *a, b;
は
int pointer a, int variable b;
を意味する省略構文であり意味論的に
variable:値をいれるもの
pointer:間接的に他の入れ物を指すもの
と区別されてると見ることもできる
int *a, b;
は
int pointer a, int variable b;
を意味する省略構文であり意味論的に
variable:値をいれるもの
pointer:間接的に他の入れ物を指すもの
と区別されてると見ることもできる
545デフォルトの名無しさん
2018/10/24(水) 00:41:21.11ID:ht/B3MxL >>544
そういうのは単純なポインタ(foo*)の時にだけ通じる話で、配列や関数ポインタや引数込みでのそれらの再帰的な組み合わせとかも考えたら、きちんとBNFで理解して型の宣言の構文を定義通りに覚えるのが一番誤解がなくてシンプルだと思うよ。
そういうのは単純なポインタ(foo*)の時にだけ通じる話で、配列や関数ポインタや引数込みでのそれらの再帰的な組み合わせとかも考えたら、きちんとBNFで理解して型の宣言の構文を定義通りに覚えるのが一番誤解がなくてシンプルだと思うよ。
546デフォルトの名無しさん
2018/10/24(水) 00:41:23.34ID:8GMcdoBP >>543レスサンクス
自分でも調べてみた
手元のc99ドラフト版から適当に抜粋
declaration:
declaration-specifiers init-declarator-list ;
declaration-specifiers:
storage-class-specifier declaration-specifiers
type-specifier declaration-specifiers
type-qualifier declaration-specifiers
function-specifier declaration-specifiers
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
declarator:
pointer direct-declarator
pointer:
* type-qualifier-list
* type-qualifier-list pointer
宣言時の * は declarator なんやね構文としては
自分でも調べてみた
手元のc99ドラフト版から適当に抜粋
declaration:
declaration-specifiers init-declarator-list ;
declaration-specifiers:
storage-class-specifier declaration-specifiers
type-specifier declaration-specifiers
type-qualifier declaration-specifiers
function-specifier declaration-specifiers
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
declarator:
pointer direct-declarator
pointer:
* type-qualifier-list
* type-qualifier-list pointer
宣言時の * は declarator なんやね構文としては
547デフォルトの名無しさん
2018/10/24(水) 00:47:37.13ID:pa4PW987 >>535
詳しい人とかハードル上げられるとな。。。
プログラミング言語C売っちゃったから、厳密な仕様は記憶の彼方だが、ポインタは厳密なカテゴリ的にもポインタだったと思う。
ここからは私の解釈だが、ポインタはアドレスを入れる「変数」。
当たり前じゃんと言われればそうなんだけど、感覚的にも型というより変数って感じ。
ポインタに型があるとすればOSがアドレスを扱うビット数と同じになる。
intとかの型はポインタが指す先にどの大きさのどういう扱いのデータがあるかを知る為で、ポインタ型そのものの大きさは変わらない。
んで、普通の変数とポインタはCだと大分違うように思うけど、アセンブリ言語だと
LD GR0,TEXT ; 変数TEXTの内容を読む。
LDA GR0,TEXT ; 変数TEXTのアドレスを読む。
程度の違いしか無いわけね。
この場合、内容もアドレスもレジスタが読むけど、Cにレジスタに相当する変数を用意する為にポインタが生まれたんだと思う。
詳しい人とかハードル上げられるとな。。。
プログラミング言語C売っちゃったから、厳密な仕様は記憶の彼方だが、ポインタは厳密なカテゴリ的にもポインタだったと思う。
ここからは私の解釈だが、ポインタはアドレスを入れる「変数」。
当たり前じゃんと言われればそうなんだけど、感覚的にも型というより変数って感じ。
ポインタに型があるとすればOSがアドレスを扱うビット数と同じになる。
intとかの型はポインタが指す先にどの大きさのどういう扱いのデータがあるかを知る為で、ポインタ型そのものの大きさは変わらない。
んで、普通の変数とポインタはCだと大分違うように思うけど、アセンブリ言語だと
LD GR0,TEXT ; 変数TEXTの内容を読む。
LDA GR0,TEXT ; 変数TEXTのアドレスを読む。
程度の違いしか無いわけね。
この場合、内容もアドレスもレジスタが読むけど、Cにレジスタに相当する変数を用意する為にポインタが生まれたんだと思う。
548デフォルトの名無しさん
2018/10/24(水) 00:53:06.37ID:8GMcdoBP549デフォルトの名無しさん
2018/10/24(水) 00:54:55.11ID:pa4PW987 x Cにレジスタに
o CにLDA使用時のレジスタに
o CにLDA使用時のレジスタに
550デフォルトの名無しさん
2018/10/24(水) 01:19:39.17ID:PoD9V6zI carとcdrに付いて小一時間
こちらの方が先だべ
こちらの方が先だべ
551デフォルトの名無しさん
2018/10/24(水) 01:36:02.36ID:uSP3iZ9v >>538
ありがとうございます説明が足りなかったかもしれません
メンバ変数の配列をコンストラクタでリスト初期化する場合どうしたらいいですか?
Hoge::Hoge() : mPiyo(0) ←これの二次元配列版を知りたいのです
ありがとうございます説明が足りなかったかもしれません
メンバ変数の配列をコンストラクタでリスト初期化する場合どうしたらいいですか?
Hoge::Hoge() : mPiyo(0) ←これの二次元配列版を知りたいのです
552はちみつ餃子 ◆8X2XSCHEME
2018/10/24(水) 01:52:38.02ID:PadB6FUj553デフォルトの名無しさん
2018/10/24(水) 10:45:25.32ID:jfcHBGCr >>547
言語実装ベースの思い込みが過ぎる。
言語規格中のポインタは型だし、変数ではない値もあり得るし、ポインタの指す先の型の違いは大きさだけではない。
↓「ポインタ型」で検索して確認されたし。
http://kikakurui.com/x3/X3010-2003-01.html
言語実装ベースの思い込みが過ぎる。
言語規格中のポインタは型だし、変数ではない値もあり得るし、ポインタの指す先の型の違いは大きさだけではない。
↓「ポインタ型」で検索して確認されたし。
http://kikakurui.com/x3/X3010-2003-01.html
554デフォルトの名無しさん
2018/10/24(水) 11:12:54.29ID:uSP3iZ9v555デフォルトの名無しさん
2018/10/24(水) 11:21:48.24ID:wUNs4a59 > void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!
当然知ってると思うけど
void (*h_ptr)(void) = f;
これは * と () の優先順位が原因だ
よく * と [] で混乱してるひともいるけど
char **hoge;
char *hoge[];
char (*hoge)[123]:
char (*hoge)[]: // エラーかい!
当然知ってると思うけど
void (*h_ptr)(void) = f;
これは * と () の優先順位が原因だ
よく * と [] で混乱してるひともいるけど
char **hoge;
char *hoge[];
char (*hoge)[123]:
char (*hoge)[]: // エラーかい!
556はちみつ餃子 ◆8X2XSCHEME
2018/10/24(水) 11:24:53.60ID:PadB6FUj >>551
今では (C++11 以降では) 宣言時に初期化も書けるから、
struct Hoge {
int a[10][10] = {};
public:
Hoge(void);
};
って感じでも書ける。
複数のコンストラクタがあるときに、
どのコンストラクタが起動したときでも初期化はしないといけないみたいなときには、
この方式で書いた方が何度も同じことを書かなくてよいので面倒くさくなくて良いかも。
今では (C++11 以降では) 宣言時に初期化も書けるから、
struct Hoge {
int a[10][10] = {};
public:
Hoge(void);
};
って感じでも書ける。
複数のコンストラクタがあるときに、
どのコンストラクタが起動したときでも初期化はしないといけないみたいなときには、
この方式で書いた方が何度も同じことを書かなくてよいので面倒くさくなくて良いかも。
557デフォルトの名無しさん
2018/10/24(水) 11:47:35.18ID:uSP3iZ9v558はちみつ餃子 ◆8X2XSCHEME
2018/10/24(水) 11:57:27.21ID:PadB6FUj アセンブラとかから C に入門したら色々と自動化されてて
ありがたいなーってなってポインタで躓いたりしづらいけど、
レイヤが違うという意識を持ってないと変に機械の理屈に引きずられることもある。
言語の理屈だとポインタはアドレスを入れるものじゃなくて、
ポインタを値として見たものをアドレスと呼んだりもするってだけ。
結局はポインタにアドレスが入ってるんだけど、まずポインタありき。
ポインタに対する演算ってのは指す先をいくつ進めるとか、
指す先の間隔がいくつだというものであって、
アドレスを演算して実現するってのは実装上の都合。
アドレスが連続しているということさえ保証はない。
たとえば
char a[2];
とあったときに
(intptr_t)(&a[1])-(intptr_t)(&a[0])
が 1 になることは言語仕様では保証されない。
(これが 1 にならないような変な環境はまず無いと思うんだけど。)
具体的に機械でどう動いているかから見ると肌感覚として理解しやすい場合もあるのはわかるが、
言語の理屈と混同しないように、一旦それは抽象の壁の向こうに押しやる必要もある。
ありがたいなーってなってポインタで躓いたりしづらいけど、
レイヤが違うという意識を持ってないと変に機械の理屈に引きずられることもある。
言語の理屈だとポインタはアドレスを入れるものじゃなくて、
ポインタを値として見たものをアドレスと呼んだりもするってだけ。
結局はポインタにアドレスが入ってるんだけど、まずポインタありき。
ポインタに対する演算ってのは指す先をいくつ進めるとか、
指す先の間隔がいくつだというものであって、
アドレスを演算して実現するってのは実装上の都合。
アドレスが連続しているということさえ保証はない。
たとえば
char a[2];
とあったときに
(intptr_t)(&a[1])-(intptr_t)(&a[0])
が 1 になることは言語仕様では保証されない。
(これが 1 にならないような変な環境はまず無いと思うんだけど。)
具体的に機械でどう動いているかから見ると肌感覚として理解しやすい場合もあるのはわかるが、
言語の理屈と混同しないように、一旦それは抽象の壁の向こうに押しやる必要もある。
559デフォルトの名無しさん
2018/10/25(木) 06:51:43.64ID:GIa2VIfF ラムダ式でthisを指定してそのクラスのメソッドを呼び出したところ、そのクラスのメンバ変数がすべて0になっててコンストラクタも動作してない状態になってたのですが、使い方間違ってますか
560デフォルトの名無しさん
2018/10/25(木) 07:15:13.40ID:kug3Loto561デフォルトの名無しさん
2018/10/25(木) 11:40:30.80ID:5Cy/pQlU562デフォルトの名無しさん
2018/10/25(木) 22:05:25.00ID:GIa2VIfF ラムダ式にはthisを指定しました
インスタンスは生きています
ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら正しい値が読み取れました
インスタンスは生きています
ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら正しい値が読み取れました
563デフォルトの名無しさん
2018/10/25(木) 22:40:27.12ID:ovezBLdW auto f = [this]() {... };
てな感じにキャプチャはしてるんだよね。してないとコンパイルエラーになるし。
デバッガでみておかしいだけならデバッガがうまく動いてないだけでは?
cout << this->hoge;
とかして見てみたらどうでしょう。
てな感じにキャプチャはしてるんだよね。してないとコンパイルエラーになるし。
デバッガでみておかしいだけならデバッガがうまく動いてないだけでは?
cout << this->hoge;
とかして見てみたらどうでしょう。
564デフォルトの名無しさん
2018/10/26(金) 16:36:40.82ID:8hqqerJ0 >>562
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら
warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら
warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
565デフォルトの名無しさん
2018/10/26(金) 16:37:20.12ID:8hqqerJ0 あとグローバルにしなくても
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
566デフォルトの名無しさん
2018/10/28(日) 23:19:51.00ID:CM0THx8+ 複数のファイルをコンパイルするとき、ソースファイルの読み込み順番ってc++ではどのように決定されるのでしょうか?
567はちみつ餃子 ◆8X2XSCHEME
2018/10/28(日) 23:35:05.21ID:oH4yrJrN 読込み順番ってのが何を言おうとしているのかよくわからんぞ。
568デフォルトの名無しさん
2018/10/29(月) 00:15:12.84ID:LkYf8yJz569はちみつ餃子 ◆8X2XSCHEME
2018/10/29(月) 01:17:32.57ID:wGJRVi/I 先に読み込ませれば (ヘッダを include したり宣言を書いたりしなくても) 定義したものが利用可能になると思ったってことなのかな?
570デフォルトの名無しさん
2018/10/29(月) 11:30:00.64ID:VxCr7qKV ならんやろ
571デフォルトの名無しさん
2018/10/29(月) 12:50:50.62ID:X5D3cySa ソースファイルの読み込み=ソースのコンパイルとして
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
>>571
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順
別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順
別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
573デフォルトの名無しさん
2018/10/29(月) 19:53:08.30ID:QH06ucqh574デフォルトの名無しさん
2018/10/29(月) 19:59:30.68ID:+o2CKGU+ vectorで複数のstd::stringの各要素を収納して管理してみたいのですが、
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";
std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー
vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";
std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー
vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
575デフォルトの名無しさん
2018/10/29(月) 20:43:24.49ID:b4sCrQ/m >>574
booktitle.push_back(A);
booktitle.push_back(A);
>>573
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
577デフォルトの名無しさん
2018/10/29(月) 21:00:10.54ID:+o2CKGU+ >>575
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
578デフォルトの名無しさん
2018/10/29(月) 21:54:36.97ID:b4sCrQ/m579デフォルトの名無しさん
2018/10/29(月) 22:57:36.19ID:oZEcP9DN580デフォルトの名無しさん
2018/10/29(月) 23:25:38.01ID:Id14AobK 関数の中でポインタ変数を作ったら、その関数から出る時、ポインタ変数は消えるけど、ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
581デフォルトの名無しさん
2018/10/29(月) 23:52:04.87ID:JGxixszg そのとおり
記録には残らないが記憶に残る
記録には残らないが記憶に残る
582デフォルトの名無しさん
2018/10/30(火) 00:19:02.74ID:tYtIFLkW ありがとう。すみませんもう一つ。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
583デフォルトの名無しさん
2018/10/30(火) 00:27:02.34ID:Md8WzUxK それは、32ビット浮動小数点のビットパターンを32ビットintに入れておけば
float型とかいらないと言ってるようなもの
float型とかいらないと言ってるようなもの
584デフォルトの名無しさん
2018/10/30(火) 00:36:21.09ID:H/liFP07 アドレス値がほしいとき
引数でアドレス入れる変数のアドレスを渡すことがある
引数でアドレス入れる変数のアドレスを渡すことがある
585デフォルトの名無しさん
2018/10/30(火) 00:46:04.26ID:0KkuIlNz >>582
情報量としては実際のところメモリアドレスなので同じだけれど型が違う
pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる
上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う
例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
情報量としては実際のところメモリアドレスなので同じだけれど型が違う
pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる
上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う
例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
586デフォルトの名無しさん
2018/10/30(火) 00:55:27.51ID:H/liFP07 アドレス渡さないと変数(今回の場合アドレスを格納する領域)に値を格納できない
コレはどんな変数でも同じ
アドレスを格納する変数もただの変数だからな
コレはどんな変数でも同じ
アドレスを格納する変数もただの変数だからな
587デフォルトの名無しさん
2018/10/30(火) 07:33:46.97ID:rZekkOWs588デフォルトの名無しさん
2018/10/30(火) 12:09:39.01ID:yVkeMr3S 「戻り値ではなく、引数の書き換えで呼び出し元に新たな値を渡したい」
・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
関数実装の際 *でデリファレンスして代入
・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
関数実装の際 そのまま代入
・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
関数実装の際 *でデリファレンスして代入
・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
関数実装の際 そのまま代入
589デフォルトの名無しさん
2018/10/30(火) 15:15:26.58ID:p4LrBCE7 >>582
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
590デフォルトの名無しさん
2018/10/30(火) 15:17:35.76ID:p4LrBCE7 あと二重ポインタとかダブルポインタとかいう用語は使わない方が良い
ポインタのポインタ(たまにポインタの配列)
配列のポインタ
のどっちかにしろ
ポインタのポインタ(たまにポインタの配列)
配列のポインタ
のどっちかにしろ
591デフォルトの名無しさん
2018/10/30(火) 15:22:49.70ID:yVkeMr3S void my_free(void** ptr) { free(*ptr); *ptr = NULL; }
.......
char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
.......
char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
592デフォルトの名無しさん
2018/10/30(火) 15:59:22.21ID:KCmKruF1 ポインタほんとむずい
593デフォルトの名無しさん
2018/10/30(火) 16:02:47.46ID:QNssPyY0 わからないときは図に描いて整理
594デフォルトの名無しさん
2018/10/30(火) 16:08:12.80ID:Id9/5UCV595デフォルトの名無しさん
2018/10/30(火) 18:50:51.23ID:rAbIHznq >>594
char pointer と double pointer が並んでも?
char pointer と double pointer が並んでも?
596デフォルトの名無しさん
2018/10/30(火) 21:19:57.26ID:4lskY4LV 自分がそう呼ぶかどうかはともかくとして、
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
597デフォルトの名無しさん
2018/10/30(火) 21:22:07.40ID:ri95Blut **ダブル ***トリプル ****クアドラプル?
うーん
うーん
598デフォルトの名無しさん
2018/10/30(火) 21:37:01.52ID:zgde8yLC それを外人のプログラマに説明して通じるかどうか
599デフォルトの名無しさん
2018/10/30(火) 21:46:50.04ID:QNssPyY0 使うのはポインタのポインタまでにしとかないと書いててワケわからなくなるぞ
600デフォルトの名無しさん
2018/10/30(火) 21:51:59.77ID:ri95Blut 素朴な疑問だけど、ビット演算の | と論理演算の ||
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
602デフォルトの名無しさん
2018/10/30(火) 22:05:37.02ID:ri95Blut ダブルポインタの流れで気になったのよね
言葉だけの疎通で どう言ってたかな?と
※ 「ビットor」 「or」 後者は前後の文意で汲んでくれ のような使い方してるわ
言葉だけの疎通で どう言ってたかな?と
※ 「ビットor」 「or」 後者は前後の文意で汲んでくれ のような使い方してるわ
603デフォルトの名無しさん
2018/10/30(火) 22:10:43.59ID:4lskY4LV 明示的にビット毎のorを指すときは bitwise or と書くけど日本語ではなんていうんだ
教科書なら「ビット毎の論理和」でいいんだろうけど古臭い
声に出して読むときは2つ組みの方をオアオアとかアンドアンド
教科書なら「ビット毎の論理和」でいいんだろうけど古臭い
声に出して読むときは2つ組みの方をオアオアとかアンドアンド
604さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/10/30(火) 22:17:49.01ID:NmwiF06a doubled pointerだよ。dがつく。
605デフォルトの名無しさん
2018/10/30(火) 22:30:53.82ID:4lskY4LV606さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/10/30(火) 22:34:37.41ID:NmwiF06a 自分の頭がおかしいので休憩します。
607デフォルトの名無しさん
2018/10/30(火) 22:43:13.11ID:J31Dj26+ double linked list のdoubleは行きのポインタ(リンク)と帰りのポインタでdoubleだし
日本語より論理的と言われがちな英語も割といい加減だよね
日本語では双方向リストと実に論理的な呼称
日本語より論理的と言われがちな英語も割といい加減だよね
日本語では双方向リストと実に論理的な呼称
608デフォルトの名無しさん
2018/10/30(火) 22:47:46.33ID:fzlT+aGo いや double pointer, triple pointer と増やしていけるし数学的なのかな
これ式で日本語でたまに使われるのは2重(2段)ポインタ、3重ポインタか
これ式で日本語でたまに使われるのは2重(2段)ポインタ、3重ポインタか
609デフォルトの名無しさん
2018/10/30(火) 23:00:20.94ID:yt1zemAy >>598
むしろ英語圏の人のほうがよく使ってる
むしろ英語圏の人のほうがよく使ってる
610はちみつ餃子 ◆8X2XSCHEME
2018/10/30(火) 23:08:47.77ID:/tj4m1Wy >>603
JIS だと「ビット単位のOR演算子」と「論理OR演算子」と書かれている。
あくまで訳語のひとつでしかないけど、JIS の性格を考えれば公式訳と言ってよかろ。
| と || の代替表記として bitor と or があるので、発音するときはこれでいくのもアリかもね。
JIS だと「ビット単位のOR演算子」と「論理OR演算子」と書かれている。
あくまで訳語のひとつでしかないけど、JIS の性格を考えれば公式訳と言ってよかろ。
| と || の代替表記として bitor と or があるので、発音するときはこれでいくのもアリかもね。
611デフォルトの名無しさん
2018/10/30(火) 23:13:11.59ID:VN5Yl689 二重ポインタを思わず「ハンドル」と言ってしまって怪訝な顔をされる俺。
612はちみつ餃子 ◆8X2XSCHEME
2018/10/30(火) 23:23:20.21ID:/tj4m1Wy C99 をざっと見た感じでは double を指すポインタは "pointer to double" という書き方になっているけど、
カジュアルな場面で double pointer と言わないとも言い切れないだろうし、
これについては >>595 の言い分に説得力を感じる。
英語がよくわかる人の肌感覚ではどんなもんなんやろね?
カジュアルな場面で double pointer と言わないとも言い切れないだろうし、
これについては >>595 の言い分に説得力を感じる。
英語がよくわかる人の肌感覚ではどんなもんなんやろね?
613デフォルトの名無しさん
2018/10/30(火) 23:38:22.13ID:EION13qU ポインタへのポインタでしかないもんを
ダブルポインタと言い換えるの気味悪い
ダブルポインタと言い換えるの気味悪い
614デフォルトの名無しさん
2018/10/30(火) 23:42:13.26ID:H/liFP07 だからな
ただの変数だからな
ただのポインタも例外じゃない
ただの変数だからな
ただのポインタも例外じゃない
615デフォルトの名無しさん
2018/10/31(水) 00:07:15.80ID:Y0YI6J+Y >>607
doubly linked list じゃね?
https://books.google.com/ngrams/graph?content=double+linked+list%2Cdoubly+linked+list&case_insensitive=on&year_start=1800&year_end=2008&corpus=15&smoothing=3
doubly linked list じゃね?
https://books.google.com/ngrams/graph?content=double+linked+list%2Cdoubly+linked+list&case_insensitive=on&year_start=1800&year_end=2008&corpus=15&smoothing=3
616デフォルトの名無しさん
2018/10/31(水) 07:22:13.82ID:NyWYateD >>613
お前さんの感覚なんてどうでもいい
pointer to pointer c でググると
Double Pointer (Pointer to Pointer) in C
https://www.geeksforgeeks.org/double-pointer-pointer-pointer-c/
が最初に出て来る現実を見なよ
お前さんの感覚なんてどうでもいい
pointer to pointer c でググると
Double Pointer (Pointer to Pointer) in C
https://www.geeksforgeeks.org/double-pointer-pointer-pointer-c/
が最初に出て来る現実を見なよ
617デフォルトの名無しさん
2018/10/31(水) 13:47:07.97ID:XAA9QXm2 悪貨は良貨を駆逐する
618デフォルトの名無しさん
2018/11/01(木) 05:49:53.11ID:G1B9TB4r おまえら、本当の0からの初心者にも、やさしくしろよな。
619デフォルトの名無しさん
2018/11/01(木) 11:03:26.87ID:z733lC2q 初心者だから何でも許されるというのは間違った考え
安田はジャーナリストとしては初心者
無能に仕事を任せるのは損失
安田はジャーナリストとしては初心者
無能に仕事を任せるのは損失
620デフォルトの名無しさん
2018/11/01(木) 11:45:07.51ID:JcPwSOae むしろ無能を起用した側の責任も
ジャーナリストは自己だが
ジャーナリストは自己だが
621デフォルトの名無しさん
2018/11/01(木) 19:27:13.53ID:8DVitDyR >>619
そういうお前が一番の初心者じゃねえのかw
そういうお前が一番の初心者じゃねえのかw
622デフォルトの名無しさん
2018/11/01(木) 22:02:58.74ID:ydgxPLcy プログラム全体でただ1つだけ走らせることが出来る、ある機能を提供するライブラリを作りたいんですけど
シングルトンで実装するのが一般的なんですかね よくわからん
シングルトンで実装するのが一般的なんですかね よくわからん
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本はドイツと違い反省せず」…中国外相、独外相に対日批判 台湾問題で理解求める [少考さん★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 高市政権「かけてもつながらない。機能していない」防衛当局間のホットライン機能せず [834922174]
- あたしゃやだよ
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑 [931948549]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
- 【朗報】ケンモジサンが買うふりかけ、二択に絞られる [394133584]
