CとかC++でさmallocとかnewとかで動的に変数確保するじゃんか? at NEWS4VIP
[2ch|▼Menu]
[1からを表示]
50:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:43:30.351 NZLwI0Qw6.net
>>42
ポインタで条件式を書くの意味がいまいち分からないけど、malloc()でメモリを確保したあとで領域を拡張するにはrealloc()関数を使う

51:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:43:52.398 Oi87Jppr0.net
>>46
よくわからんどういうこと?

52:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:44:29.354 EtjXPiAK0.net
変数のスコープは動的確保云々以前の問題だろ

53:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:45:39.789 FehnI0u90.net
スコープ云々はC以前の問題だろ・・・

54:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:45:49.962 Oi87Jppr0.net
例えばさ?
シューティングゲームがあるとするじゃんか?
1面で出てくる敵を一番最初に全部宣言するのは出来るんだ
でも動的に確保しようとすると途中で増やしたり減らしたり出来るようにしたいとすると
どういう感じになるの?

55:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:46:10.730 3WKXtYI0d.net
もうちょっとこう謙虚な姿勢で話を聞けないかな

56:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:46:36.685 EL0gdgIT0.net
>>47
変数pの定義はif文より前に書かなきゃ未定義の変数を参照してるエラーになる
>>34が正解

57:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:46:41.477 82pHL68s0.net
今夜の「お前には無理」スレ

58:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:46:59.767 LF7SBktz0.net
mallocは確保したポインタのメモリ範囲拡張するんじゃあなくて、確保してみてできたメモリのポインタを返すんやろ

59:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:47:29.752 Oi87Jppr0.net
{
動的に確保
確保した変数へアクセス
}
これは出来るけど
{
{
動的に確保
確保した変数へアクセス
}
{
確保した変数へアクセス←これがスコープでエラーになるでしょ?
}
}

60:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:48:50.005 NZLwI0Qw6.net
>>53
C++ならstd::vectorとかを使うのが一般的かと
Cならポインタを格納する配列を用意しておいて、その配列内の要素が指す領域が不要になったら都度都度free()関数を呼べば適切に開放される

61:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:49:03.449 J8kkIzYAd.net
>>53
敵機なら予め作って置いた敵機というオブジェクトを動的に確保するだけだと思うが

62:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:49:25.360 SZ+XAls20.net
>>53
ファミコンだと分かりやすいけど必ず最大数決まってる
最近のゲームはUnityだからC#でみんなList使いまくりですわ
普通の配列すら使わない時代

63:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:49:32.168 Oi87Jppr0.net
>>55
俺も


64:>>34がかなり重要な気がしてる もう少しな気がする ようするに要素数の無いポインタ配列を使って 要素番号を変えれば行けるという事だよな? 高度過ぎて俺にできる気がしないんだけどwww ようするに必要な数だけ増やして 増やした数を変数に入れておけばそれを要素数にできる



65:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:50:07.955 wV1h419f0.net
磨呂ック

66:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:51:07.632 NZLwI0Qw6.net
これってもしかしてmalloc()とかそれ以前の変数のスコープの話?

67:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:51:31.730 jmAI4hIV0.net
こうしてCOBOLみたいなコードが量産されて行くのであった
全部グローバル宣言!

68:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:51:39.394 EtjXPiAK0.net
昔の環境なら動的に確保しない、遅いから
最近の環境ならメモリ確保は隠蔽されてるから動的確保云々を意識することはあまりない

69:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:52:13.004 Oi87Jppr0.net
>>59
>>34みたいに事前にポインタを宣言しといて
そのポインタ配列、もしくはインスタンスのポインタを基に条件式や引数で渡すって感じってことだよな?
ベクターってのがインスタンスのポインタってことなん?
C言語の入門書にそこまで書いてないんだけどwwwww

70:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:52:29.278 J8kkIzYAd.net
>>61
ファミコンのそれは配列云々よりもっと低レベル
4bit確保して制御できる数は15機みたいなビット単位でぶち込んである

71:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:53:03.604 ahA3153c0.net
例外拾えよ簡単な話だろ

72:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:54:52.365 Oi87Jppr0.net
>>60
それは敵機クラスで動的に増やすの?
それともメインクラスで敵機を増やすの?
敵機[20]でメインクラスで最初から宣言したら
条件式で[20]までなら条件式を組んでもエラーにならんのだけど
敵機[20]を動的に増やそうと書くと
最初ないわけだからエラーになってたのよね
そこをポインタで書いて要素数を変数にしたらいけるって言われると
納得できたんだけど
この認識でええの?

73:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:55:17.716 EtjXPiAK0.net
なんで禄にプログラム書けない輩に限ってC/C++に手を出すかな

74:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:56:18.673 Oi87Jppr0.net
>>61
Unityって少し触ったけど
あれも最初に全部定義する感じでしょ?
Javaとかと同じで

75:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:57:00.807 NZLwI0Qw6.net
>>67
vectorはインスタンスのことじゃなくてC++のクラス名(違いは分かっているのだろうか…)

76:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:57:09.216 Oi87Jppr0.net
>>66
どういうこと?

77:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:57:53.548 Oi87Jppr0.net
>>73
わからない
テンプレートとかベクターとかまではやったけど
その辺りからさっぱりわからないから

78:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:58:30.911 LF7SBktz0.net
>>71
たぶん、「俺凄いゲーム作りたいから下手になんか使って処理落ちするよりC/C++で始めからやるでつ!」じゃね?

79:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:58:47.095 jmAI4hIV0.net
ちゃんとfree()してくれよ
できないなら全部グローバルだ

80:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:59:02.477 Oi87Jppr0.net
最初に全部定義するのはかけるんだけど
動的に確保したソースの書き方がワカラン!
>>34をヒントに組んで行けという事なのか?

81:以下、?ちゃんねるからVIPがお送りします
21/10/22 00:59:34.660 LF7SBktz0.net
>>72
Cもそうだよ
その上めっちゃ厳しいよ

82:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:00:15.003 EtjXPiAK0.net
最初に全部定義って何の話だ?C89?

83:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:00:33.675 J8kkIzYAd.net
stdio(std-io)とかstd::
みたいなやつが 近代のコンピュータにおける標準入出力、Standard-Input-Output、ということを分かってない説も浮上

84:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:00:36.609 NZLwI0Qw6.net
>>70 で書いてあるようなことがしたいなら
C++ならさっき書いたvectorクラスを使う
Cならrealloc()関数でポインタが指す領域を拡張する
realloc(既存の敵機配列のポインタ, sizeof(敵機)*増やしたい個数);
↑みたいな感じで

85:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:01:30.910 EL0gdgIT0.net
>>62
配列の要素数を増やすならreallocで増やすとか
char *p,*q;
p=malloc(10);←サイズ10の領域を確保してアドレスをpに代入
q=realloc(p,20);←pの指す領域のサイズを20に変更してアドレスをqに代入
詳しくはrealloc関数を調べてくれ

86:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:01:48.807 z210Z/3C0.net
動的に変数確保って何?
実行時にインスタンスを生成すること?
コンパイルエラーと関係ないやん

87:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:02:39.745 Oi87Jppr0.net
>>79
Cも最初に定義しないと書けないの?
定義するのはポインタで定義していくの?
というか描けないんだよエラーになるから
結局最初にすべて定義してるプログラミングしてる

88:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:03:14.101 vf+kplqu0.net
>>72
もしかしたら Unity をプログラミング言語のひとつだと思って...ないよな?

89:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:04:51.966 Oi87Jppr0.net
>>82
それでポインタですべて定義して
要素数も変数にして増やした分を変数に代入して
関数化していくってこと?
それって滅茶苦茶難しくないか?
最早今までやってた俺のプログラミングなんてお子様レベルwwww

90:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:05:30.979 NZLwI0Qw6.net
「最初で定義」の意味がよく分からないけど
ブロックの途中で変数宣言ができないこと(古いC言語の規格であった制約)なのか
ブロック内で宣言した変数をブロック外から参照できないこと(言語問わず一般的な制約)
のどっちなのか

91:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:05:31.581 msZIkVird.net
>>77
すぐ消えるプログラムなら問題ないけどな
malloc使うけど意図的にfree呼ばないコンパイラとかもある

92:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:05:42.419 EtjXPiAK0.net
まず変数のスコープを理解するべき
先頭以外で変数宣言することは動的確保とは呼ばない

93:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:06:56.739 Oi87Jppr0.net
なんかわかってきた気がする
ポインタ配列で要素数の部分で動的に確保して
いらない部分を要素数で削れという事か
しかしほんとにそんなソースコードが書けるのか不思議で仕方がない

94:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:07:12.204 LF7SBktz0.net
>>85
ポインタは変数で確保したメモリのアドレスだから途中で宣言しても差し支えはないくらいだ

95:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:10:07.040 NZLwI0Qw6.net
>>91
> ポインタ配列で要素数の部分で動的に確保して
int a[] ←の[]内の数値のこと?
> いらない部分を要素数で削れ
ポインタを格納した配列なら、各要素に対してfree()を呼ばないとメモリリークが起きて無駄なメモリを消費することになる

96:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:10:58.630 J8kkIzYAd.net
まず用語を正確に押さえよう?
宣言というのは文字通り「使いますよ」という宣言に過ぎずそれ自体に実体はない
Cにおける定義は注釈がなければ#defineによる定数定義を指す

97:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:11:00.115 Oi87Jppr0.net
>>92
実数じゃなさそうだもんな
引数でもインスタンスの一番最初のポインタを1個書けばいいだけだもんな
中身は敵10個分でも20個分でもいいわけか
ほんとにできんのかよ

98:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:12:34.045 Oi87Jppr0.net
インベーダーゲームでも作ってみるか・・・
ほんとにできんのか不思議で仕方がない・・・

99:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:14:26.058 Oi87Jppr0.net
てか入門書にそこまで書いてねえよwwww

100:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:16:12.722 ahA3153c0.net
Cなら存在確認ができるように変数にnull入れて宣言すりゃいいだけだ

101:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:18:48.344 LF7SBktz0.net
>>95
ちなみに、関数呼び出すときに*有無の動きの違いわかる?
main()
{
int *a=1;
r=hoge(a);
printf(“


102:%d“,*a); r=hoge(*a); printf(“%d“,*a); } int hoge(int *b) { b=b+1; return(0); }



103:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:20:39.499 z210Z/3C0.net
ポインタと変数の違いがわかってなかったのか
もっと頑張れ

104:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:25:32.987 Oi87Jppr0.net
>>99
上がint *aのアドレスのint分1個次のアドレスの値を表示してて
下はint hoge(int *b) で宣言したint *bのアドレスの1個次のアドレスに入ってるものを表示?

105:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:29:18.787 Oi87Jppr0.net
あれ違った?w

106:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:31:29.00


107:1 ID:LF7SBktz0.net



108:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:37:43.208 cUueluz80.net
このまえ変数の省略がなんとかとか、書いてた人?

109:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:38:11.191 Oi87Jppr0.net
>>103
というか上のも違うけどいろいろ壊れる気がするw
それだと上がint *aのint分1個次のアドレスに入ってるものが表示
下がその数値を*aで飛ばしてるからヤバいことになるwww異空間参照www

110:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:42:49.928 Oi87Jppr0.net
でも>>34がそういうことだよね
*pにしといて
3つ分マロックで敵増やしたら
して
(p+3)->hoge = 3;みたいに使えばいいという事だよね?
この書き方があってるかわからんが

111:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:45:26.662 Oi87Jppr0.net
3つ分増やしたら
変数にkusoに3を入れて
(p+kuso)->hoge = 10;
こういうことか?

112:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:48:33.953 Oi87Jppr0.net
for( int i = 0 ; i < kuso ; i++){
(p+kuso)->hoge = 10;
}
これでエラーにならんてことか?

113:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:49:00.550 z210Z/3C0.net
引数に渡すことを飛ばすって言わんような普通
>>99
これって上が参照渡し下が値渡しになんの?

114:以下、?ちゃんねるからVIPがお送りします
21/10/22 01:50:10.282 Oi87Jppr0.net
for( int i = 0 ; i < kuso ; i++){
if( (p+kuso)->hoge == 1 ){
//関数
}
}
こんな感じか
あー出来そうだなこの書き方があってるならw

115:以下、?ちゃんねるからVIPがお送りします
21/10/22 02:02:24.196 idrCh94y0.net
別の問題が発生すると思うが
2歩進んで5歩下がるのもまた勉強やな

116:以下、?ちゃんねるからVIPがお送りします
21/10/22 02:07:46.351 .net
CとC++でちょっと仕様が違うんよな

117:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

658日前に更新/28 KB
担当:undef