[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 02/07 21:28 / Filesize : 46 KB / Number-of Response : 199
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 96



1 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 03:01:40.24 ]
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 95
toro.2ch.net/test/read.cgi/tech/1326459906/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 156代目
toro.2ch.net/test/read.cgi/tech/1328276597/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
codepad.org/

168 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:57:20.43 ]
情報系じゃなかったけど
レポート半期で12本初回抜き打ち試験中間試験定期試験とか当たり前のようにやって
全部提出出席しても試験でしくじって落とされるやつがちらほらいて地獄絵図だった
後輩にはうちの大学には絶対に来るなと忠告したよ

169 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:34:08.84 ]
何の為に大学に行ってるの?

170 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:35:02.15 ]
行かないと社会が人間扱いしてくれないからとりあえず

171 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:43:35.47 ]
>>168
普通だろそれ


172 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:53:04.52 ]
必修だから落とされないとか、そんな世の中なの?

173 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 18:59:29.22 ]
関数func()内で
int data[177][23]が定義されており、データが関数内で入れられるとします。

この関数の外から、2次元配列のポインタのポインタを渡し、int data[177][23]のアドレスを引数で返したいのですが、


void func( @ ){
int data[177][23];

A = data;
}

void func2(void){

174 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:01:40.10 ]
失礼しました。途中で送信してしまったようで・・・
改めまして


関数func()内で
int data[177][23]が定義されており、データが関数内で入れられるとします。

この関数の外から、2次元配列のポインタのポインタを渡し、int data[177][23]のアドレスを引数で返したいのですが、


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

A = data;
}

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

func1(C);
}

@〜Cの記述は、どの様にしたらよろしいでしょうか?


175 名前:174 mailto:sage [2012/02/07(火) 19:03:24.76 ]
int data[177][23]の実体はfunc1()が持ち、
他の関数からその中身を参照にしたいのです(グローバル変数使用不可)

宜しくお願い致します。

176 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:06:05.04 ]
> 関数func()内で



177 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:07:47.55 ]
mallocを使うか根本的なところから見直す

178 名前:デフォルトの名無しさん mailto:sage [2012/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 mailto:sage [2012/02/07(火) 19:17:27.61 ]
int data[177][23]をグローバルに持って行ければ全然問題ないのですが、
事情があって、それが出来ないのです・・・

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

180 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:18:57.51 ]
ゴミコード発生の瞬間である。


181 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:20:25.28 ]
やりたい事がさっぱり分からん
エスパー待ち

182 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:25:29.62 ]
その実装だと誤動作するよ。自動変数で調べてね。
以下のいずれかの修正をしてもらう必要がある。
@
void getData(*****) {
. static int data[N][M];
}
Aソースを分割して、
static int data[N][M];
void getData(*******);
B
malloc つかう。

183 名前:174 mailto:sage [2012/02/07(火) 19:29:37.65 ]
>>182
おお!
すみません・・・static扱いでお願いします。
実際はstaticでした。懸案事案の抽象化に失敗してしまいました・・・



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

  A = data;
}

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

  func1(C);
}


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

185 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:43:35.47 ]
@int*** value
A*value
Bint** data
C&data
で、できると思うけど、何がやりたいのかは知らないし、あまりよくないコードな気がする。
やりたいこと書いて代案出してもらったほうがいいと思うけど、まあ、とりあえず。

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



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

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

189 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:49:42.42 ]
そんなことを気にするのはお前には早すぎるよ。

190 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:54:56.96 ]
>>187
こいつ最高にアホ

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

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

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

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

195 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:09:28.84 ]
>>191
決まりではないが鉄則ではある

196 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:10:39.31 ]
>>188
大雑把に1KB以下なら気にしなくていい



197 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/07(火) 21:12:29.93 ]
>>192
Windows API はそういう感じだね。

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

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

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<46KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef