C言語なら俺に聞け(入門編)Part 96at TECH
C言語なら俺に聞け(入門編)Part 96 - 暇つぶし2ch178:デフォルトの名無しさん
12/02/07 19:15:15.24
void func1( *(*pArray)[23]){
  int data[177][23];

  *pArray = data;
}

void func2(void){
  int *pArray[177][23]; // 2次元配列のポインタのポインタの宣言
  int ans;

  func1(pArray);

  ans = pArray[0][0] + pArray[176][22];
}

イメージとしてはこんな感じですが、もちろんこれでは上手く行きません・・・



179:174
12/02/07 19:17:27.61
int data[177][23]をグローバルに持って行ければ全然問題ないのですが、
事情があって、それが出来ないのです・・・

※私に与えられてる権限としては、func1の引数の変更、func2の製作

180:デフォルトの名無しさん
12/02/07 19:18:57.51
ゴミコード発生の瞬間である。


181:デフォルトの名無しさん
12/02/07 19:20:25.28
やりたい事がさっぱり分からん
エスパー待ち

182:デフォルトの名無しさん
12/02/07 19:25:29.62
その実装だと誤動作するよ。自動変数で調べてね。
以下のいずれかの修正をしてもらう必要がある。

void getData(*****) {
. static int data[N][M];
}
②ソースを分割して、
static int data[N][M];
void getData(*******);

malloc つかう。

183:174
12/02/07 19:29:37.65
>>182
おお!
すみません・・・static扱いでお願いします。
実際はstaticでした。懸案事案の抽象化に失敗してしまいました・・・



void func1(①){
  static int data[177][23];

  ② = data;
}

void func2(void){
  ③ // 2次元配列のポインタのポインタの宣言

  func1(④);
}


184:デフォルトの名無しさん
12/02/07 19:31:48.22
>>181
知りたいのは、「2次元配列のポインタのポインタ」を引数に渡してアドレスを入れてもらう
やり方です

185:デフォルトの名無しさん
12/02/07 19:43:35.47
①int*** value
②*value
③int** data
④&data
で、できると思うけど、何がやりたいのかは知らないし、あまりよくないコードな気がする。
やりたいこと書いて代案出してもらったほうがいいと思うけど、まあ、とりあえず。

186:デフォルトの名無しさん
12/02/07 19:53:39.40
ローカルstaic変数のアドレスを取るとかグローバルと大差ないわ
いや、グローバルはグローバルだって意識できるからまだいいけど
これじゃあソレもできないから最低最悪だな

187:デフォルトの名無しさん
12/02/07 20:40:54.32
静的なオブジェクト/動的なオブジェクト(free必要)
これ以上の情報を意識する必要はないし、意識しなけりゃならないのは最低最悪。
グローバル? 今時使わないよね。w

188:デフォルトの名無しさん
12/02/07 20:44:17.33
質問
関数って引数は何個までとか何バイトまでにした方が良いってのはある?
ある程度を超えるとメモリに積む作業が増えるので急激に遅くなる、とか。
大差無いのかな。

189:デフォルトの名無しさん
12/02/07 20:49:42.42
そんなことを気にするのはお前には早すぎるよ。

190:デフォルトの名無しさん
12/02/07 20:54:56.96
>>187
こいつ最高にアホ

191:デフォルトの名無しさん
12/02/07 20:59:26.69
>>189 初心者は速度を気にしちゃいけないなんて決まりがあったのか。
知らなかったわ、すまん。

192:デフォルトの名無しさん
12/02/07 21:03:19.05
>>188
変数固めて構造体にして、ポインタで渡す
俺なら

193:はちみつ餃子 ◆8X2XSCHEME
12/02/07 21:03:52.10
>>188
パフォーマンスへの影響は環境によるので実測しないとなんとも言えないけど、
計算量的によほど厳しい条件下でなければはっきりわかるような差は出ないよ。
回数が多く呼ばれる関数ならちょっとした差が全体に多きく影響することもあるけど、
どこまで許容できるかは程度問題なのでスパッと基準を決められるものではないな。

194:デフォルトの名無しさん
12/02/07 21:07:52.89
問題になるまでほっときゃいい
腐りだしたら破棄して作りなおしゃいい
ダしゃいいタマがうずくなら

195:デフォルトの名無しさん
12/02/07 21:09:28.84
>>191
決まりではないが鉄則ではある

196:デフォルトの名無しさん
12/02/07 21:10:39.31
>>188
大雑把に1KB以下なら気にしなくていい

197:はちみつ餃子 ◆8X2XSCHEME
12/02/07 21:12:29.93
>>192
Windows API はそういう感じだね。

でも、その構造体だってどこかでメモリを消費するわけだし、
構造体に値を放り込むのだってゼロコストなわけじゃない。
同じデータをある程度何度も繰り返して渡すような状況ならいいが、
そうでないならパフォーマンスの差はほとんど出ないと思う。

バイナリ互換性を維持したまま構造体に要素を追加して拡張できる点で有利ではあるので、
長期的にインターフェイスを維持したいときには考慮に値する方法と言える。

198:デフォルトの名無しさん
12/02/07 21:19:43.77
こういうくだらん話しか出てこないから初心者は気にすることはないってこと。


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