トップページ⇒tech
1001コメント282KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/02/04(土) 03:01:40.24
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 95
http://toro.2ch.net/test/read.cgi/tech/1326459906/
★過去スレ
http://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代目
http://toro.2ch.net/test/read.cgi/tech/1328276597/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0153デフォルトの名無しさん2012/02/07(火) 15:53:13.11
3段階評価ならCって不可じゃねーの?普通

3段階なら、全提出でB、内容がマトモでAだな
提出してないのはCでも文句言えないだろ
0154デフォルトの名無しさん2012/02/07(火) 15:53:54.59
プログラムの出来がパーフェクトで8割提出なら80点
プログラムの出来が80点で8割提出なら80*0.8=64点
プログラムの出来が90点で8割提出なら90*0.8=72点

00-60 不合格
60-70 C
70-80 B
80-100 A

お前のプログラムの出来が80から90に満たない程度の出来だったと判断されたんだろ
0155デフォルトの名無しさん2012/02/07(火) 15:55:05.69
パンデモニウムさんは可愛いけど声がイラつく
0156デフォルトの名無しさん2012/02/07(火) 16:03:32.42
>>154
専門科目が6割以上合格ってどんだけ昔の考え?
0157デフォルトの名無しさん2012/02/07(火) 16:08:14.75
A 優
B 良
C 可

D 不可

だろw

Aくれない教授はゴミだよ。生ゴミ以下。
0158デフォルトの名無しさん2012/02/07(火) 16:18:57.38
それ4段階じゃね?
レポートのみなら未提出がある時点でAはあり得ないだろ
0159デフォルトの名無しさん2012/02/07(火) 16:21:29.31
>>158
単位がくれるっていう前提で3段階っていっちゃったね。
ふつうはどの大学も合格がABCの3つだからね。

0160デフォルトの名無しさん2012/02/07(火) 16:29:03.64
未提出がある時点でAがありえない、とまではいわないが、
未提出があるにもかかわらずAを与えうる回答をそれまでにしたかどうかが気になるな
0161デフォルトの名無しさん2012/02/07(火) 16:30:27.44
つまり、求められた回答と同じレベル(テストで言うと100点)の回答しか出していないなら、未提出がある時点でAはない。
0162デフォルトの名無しさん2012/02/07(火) 16:46:10.86
実は本当は8つ提出してなくてぶっちゃけAとかどうでもよくて
単位が貰えるか不安だったけど安心した俺内野手
0163デフォルトの名無しさん2012/02/07(火) 17:01:57.43
>>159
「単位をくれる」なのか「単位が貰える」なのか
つか前提ってすごいな。最近の大学はそんなもんなのか?

>>162
教授次第だけど1/3以上未提出なら普通はDになるんじゃないかな
0164デフォルトの名無しさん2012/02/07(火) 17:02:21.17
むしろ全部提出してる奴は少ないからな。必修なら落とされないと思う。
0165デフォルトの名無しさん2012/02/07(火) 17:10:40.98
そういや私の通ってた大学も(頭が)足りないやつは追加提出させられてた気がするな
必修ならほぼ落とすことは無いか
0166デフォルトの名無しさん2012/02/07(火) 17:25:23.02
選択がないので1つでも落すとアボン。
0167デフォルトの名無しさん2012/02/07(火) 17:31:58.14
落とされない大学なんぞに意味はないな。
0168デフォルトの名無しさん2012/02/07(火) 17:57:20.43
情報系じゃなかったけど
レポート半期で12本初回抜き打ち試験中間試験定期試験とか当たり前のようにやって
全部提出出席しても試験でしくじって落とされるやつがちらほらいて地獄絵図だった
後輩にはうちの大学には絶対に来るなと忠告したよ
0169デフォルトの名無しさん2012/02/07(火) 18:34:08.84
何の為に大学に行ってるの?
0170デフォルトの名無しさん2012/02/07(火) 18:35:02.15
行かないと社会が人間扱いしてくれないからとりあえず
0171デフォルトの名無しさん2012/02/07(火) 18:43:35.47
>>168
普通だろそれ
0172デフォルトの名無しさん2012/02/07(火) 18:53:04.52
必修だから落とされないとか、そんな世の中なの?
0173デフォルトの名無しさん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){
0174デフォルトの名無しさん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の記述は、どの様にしたらよろしいでしょうか?
01751742012/02/07(火) 19:03:24.76
int data[177][23]の実体はfunc1()が持ち、
他の関数からその中身を参照にしたいのです(グローバル変数使用不可)

宜しくお願い致します。
0176デフォルトの名無しさん2012/02/07(火) 19:06:05.04
> 関数func()内で
0177デフォルトの名無しさん2012/02/07(火) 19:07:47.55
mallocを使うか根本的なところから見直す
0178デフォルトの名無しさん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];
}

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

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

※私に与えられてる権限としては、func1の引数の変更、func2の製作
0180デフォルトの名無しさん2012/02/07(火) 19:18:57.51
ゴミコード発生の瞬間である。
0181デフォルトの名無しさん2012/02/07(火) 19:20:25.28
やりたい事がさっぱり分からん
エスパー待ち
0182デフォルトの名無しさん2012/02/07(火) 19:25:29.62
その実装だと誤動作するよ。自動変数で調べてね。
以下のいずれかの修正をしてもらう必要がある。
�@
void getData(*****) {
. static int data[N][M];
}
�Aソースを分割して、
static int data[N][M];
void getData(*******);
�B
malloc つかう。
01831742012/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);
}
0184デフォルトの名無しさん2012/02/07(火) 19:31:48.22
>>181
知りたいのは、「2次元配列のポインタのポインタ」を引数に渡してアドレスを入れてもらう
やり方です
0185デフォルトの名無しさん2012/02/07(火) 19:43:35.47
�@int*** value
�A*value
�Bint** data
�C&data
で、できると思うけど、何がやりたいのかは知らないし、あまりよくないコードな気がする。
やりたいこと書いて代案出してもらったほうがいいと思うけど、まあ、とりあえず。
0186デフォルトの名無しさん2012/02/07(火) 19:53:39.40
ローカルstaic変数のアドレスを取るとかグローバルと大差ないわ
いや、グローバルはグローバルだって意識できるからまだいいけど
これじゃあソレもできないから最低最悪だな
0187デフォルトの名無しさん2012/02/07(火) 20:40:54.32
静的なオブジェクト/動的なオブジェクト(free必要)
これ以上の情報を意識する必要はないし、意識しなけりゃならないのは最低最悪。
グローバル? 今時使わないよね。w
0188デフォルトの名無しさん2012/02/07(火) 20:44:17.33
質問
関数って引数は何個までとか何バイトまでにした方が良いってのはある?
ある程度を超えるとメモリに積む作業が増えるので急激に遅くなる、とか。
大差無いのかな。
0189デフォルトの名無しさん2012/02/07(火) 20:49:42.42
そんなことを気にするのはお前には早すぎるよ。
0190デフォルトの名無しさん2012/02/07(火) 20:54:56.96
>>187
こいつ最高にアホ
0191デフォルトの名無しさん2012/02/07(火) 20:59:26.69
>>189 初心者は速度を気にしちゃいけないなんて決まりがあったのか。
知らなかったわ、すまん。
0192デフォルトの名無しさん2012/02/07(火) 21:03:19.05
>>188
変数固めて構造体にして、ポインタで渡す
俺なら
0193はちみつ餃子 ◆8X2XSCHEME 2012/02/07(火) 21:03:52.10
>>188
パフォーマンスへの影響は環境によるので実測しないとなんとも言えないけど、
計算量的によほど厳しい条件下でなければはっきりわかるような差は出ないよ。
回数が多く呼ばれる関数ならちょっとした差が全体に多きく影響することもあるけど、
どこまで許容できるかは程度問題なのでスパッと基準を決められるものではないな。
0194デフォルトの名無しさん2012/02/07(火) 21:07:52.89
問題になるまでほっときゃいい
腐りだしたら破棄して作りなおしゃいい
ダしゃいいタマがうずくなら
0195デフォルトの名無しさん2012/02/07(火) 21:09:28.84
>>191
決まりではないが鉄則ではある
0196デフォルトの名無しさん2012/02/07(火) 21:10:39.31
>>188
大雑把に1KB以下なら気にしなくていい
0197はちみつ餃子 ◆8X2XSCHEME 2012/02/07(火) 21:12:29.93
>>192
Windows API はそういう感じだね。

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

バイナリ互換性を維持したまま構造体に要素を追加して拡張できる点で有利ではあるので、
長期的にインターフェイスを維持したいときには考慮に値する方法と言える。
0198デフォルトの名無しさん2012/02/07(火) 21:19:43.77
こういうくだらん話しか出てこないから初心者は気にすることはないってこと。
0199デフォルトの名無しさん2012/02/07(火) 21:42:00.85
1KBも引数あったら俺なら確実に間違える。
正しい順序、個数で記述するには丸以上1日かかる。自信がある。
0200デフォルトの名無しさん2012/02/07(火) 21:43:16.81
回答ありがとうございました。
超特大構造体ならさすがにポインタ渡すけど、
十数バイトで気にする事はないんですね。
0201デフォルトの名無しさん2012/02/07(火) 21:45:15.31
そんなことより正しい設計かどうかを気にするようにした方がいい。
0202デフォルトの名無しさん2012/02/07(火) 21:47:06.98
>>197
なんだその程度の理解か
0203デフォルトの名無しさん2012/02/07(火) 23:02:11.05
>>200
10数バイトって…
int 4個で気にしてちゃ何もできんだろw
0204デフォルトの名無しさん2012/02/07(火) 23:25:21.50
CreateFile()で引数7個、28バイトだぞ。
0205デフォルトの名無しさん2012/02/07(火) 23:27:51.80
>>149
また楽しいコードかいてるねぇ
再帰使わないで書いたのはいいだろう

ただ、あえてfor文内にあえて詰め込まなくても。。
0206デフォルトの名無しさん2012/02/07(火) 23:30:35.69
CreateWindowEx()で12個。
0207デフォルトの名無しさん2012/02/07(火) 23:31:11.68
MyCreateWindowExは引数一つだよ
0208デフォルトの名無しさん2012/02/07(火) 23:33:16.33
>>205
質問じゃないならヘボは出てこなくていいよ。
0209デフォルトの名無しさん2012/02/07(火) 23:38:09.82
>>208
ブーメラン?
0210デフォルトの名無しさん2012/02/07(火) 23:39:44.65
どこのヘボもいつも同じことしか言わないな。
0211デフォルトの名無しさん2012/02/07(火) 23:41:06.48
なんでこう見下すやつが出てくるのかね
現実世界で認められてないの?
0212デフォルトの名無しさん2012/02/07(火) 23:43:12.85
自覚のないヘボは甘やかすと大変なことになるんだよ。
0213デフォルトの名無しさん2012/02/07(火) 23:45:40.05
他人を甘く見るやつはだいたい足元すくわれてるよね
0214デフォルトの名無しさん2012/02/07(火) 23:46:41.93
>>50みたいに?
0215デフォルトの名無しさん2012/02/07(火) 23:47:44.81
ヘボなくせに他人を甘く見てるのは>>205だろwww
0216デフォルトの名無しさん2012/02/07(火) 23:48:55.96
       / \  /\ キリッ
.     / (ー)  (ー)\    <「再帰使わないで書いたのはいいだろう」
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー’´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一””””~~``’ー?、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ   <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / // 
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/ 
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー’´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l  バンバン
 ヽ    -一””””~~``’ー?、   -一”””’ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
0217デフォルトの名無しさん2012/02/07(火) 23:49:31.47
別に甘く見てないよ
そんなに行数を少なくすることが重要なんだろうかというただの感想

そう思わないか?
0218デフォルトの名無しさん2012/02/07(火) 23:51:34.03
「そう思わないか? 」 キリッ(AA略
0219デフォルトの名無しさん2012/02/07(火) 23:53:36.13
もしかして>>149だった?
だったらすまん
0220デフォルトの名無しさん2012/02/07(火) 23:55:38.61
いや、おれは>>50だけど。
0221デフォルトの名無しさん2012/02/07(火) 23:59:32.22
1行プロコンじゃないんだから、わかりやすく書けばいいのにって思う
せっかくの高級言語なんだしさぁ。。
0222デフォルトの名無しさん2012/02/08(水) 00:00:53.26
わかりやすく書いたら1行に収まるだろ
制御文増やすとわかりにくくなる
0223デフォルトの名無しさん2012/02/08(水) 00:04:48.96
Cは低級言語だよ。
まったく、基礎知識のあるやつがほとんどいないのが原因だよな。
0224デフォルトの名無しさん2012/02/08(水) 00:06:58.98
ttp://ja.wikipedia.org/wiki/%E9%AB%98%E7%B4%9A%E8%A8%80%E8%AA%9E
0225デフォルトの名無しさん2012/02/08(水) 00:10:01.41
なんかWikiもものによってひどいよね。
せめて計算機の勉強した人が書けばいいのに。
0226デフォルトの名無しさん2012/02/08(水) 00:12:30.87
>>225
じゃあ書き直せば?
0227デフォルトの名無しさん2012/02/08(水) 00:13:36.96
お前がな。
0228デフォルトの名無しさん2012/02/08(水) 00:14:47.51
>>227
基礎知識がない呼ばわりしてるくせして矛盾したこと言ってんじゃねぇぞ
0229デフォルトの名無しさん2012/02/08(水) 00:21:26.67
>>152 全部出してやっと評価対象になるのに、3つも出さないのは評価対象外
0230デフォルトの名無しさん2012/02/08(水) 00:27:31.99
>>228
あるんだったらお前が書けよ。
0231デフォルトの名無しさん2012/02/08(水) 00:29:41.89
>>230
じゃあ、今のままでよい
0232デフォルトの名無しさん2012/02/08(水) 00:31:03.84
しかし、>>224の分け方だったらそもそも分ける必要ねーだろって感じだな。
0233デフォルトの名無しさん2012/02/08(水) 00:36:36.62
逆にCを低級と思う理由は?
0234デフォルトの名無しさん2012/02/08(水) 00:37:37.51
まともに使えるやつが少ないの見ればわかるだろJK
0235デフォルトの名無しさん2012/02/08(水) 00:38:55.32
そういう定義なの?低級(低水準)ってw
0236デフォルトの名無しさん2012/02/08(水) 00:42:57.25
関数型 > Web系・シェル、VM動的型付け
> VM静的型付け > C++ > C > asm > バイナリ

こんな感じか
0237デフォルトの名無しさん2012/02/08(水) 00:45:03.52
またヘボがわけのわからんもの出してきたな…
0238デフォルトの名無しさん2012/02/08(水) 00:46:48.19
>>237
えっ?おまえが書いたんじゃなかったの?w >>236
0239デフォルトの名無しさん2012/02/08(水) 00:50:26.07
なんだ、英文のがよっぽどまともじゃないか。
http://en.wikipedia.org/wiki/High-level_programming_language
0240デフォルトの名無しさん2012/02/08(水) 00:51:27.59
低級高級なんて感覚的なもんにちゃんとした定義があると思ってるのか
ハードウェアよりであれば低級
Cが高級だったのは昔の話
0241デフォルトの名無しさん2012/02/08(水) 00:54:45.23
Low-level programming languageのwikiには、一般には機械語かアセンブラ言語を指すって
書いてあるけどね。。

In computer science, a low-level programming language is a programming language that provides little or no abstraction from a computer's instruction set architecture. Generally this refers to either machine code or assembly language.
0242デフォルトの名無しさん2012/02/08(水) 00:55:04.67
>>239
翻訳してるだけじゃねーか
しかもTalkで議論されてるw
0243デフォルトの名無しさん2012/02/08(水) 00:56:59.15
激しく
ど う で も い い
0244デフォルトの名無しさん2012/02/08(水) 00:57:06.02
>>242
いやいや、翻訳しただけだよもちろん、そう書いてあるよってだけだからw
0245デフォルトの名無しさん2012/02/08(水) 00:58:13.06
あ、>>242が>>241に対して言ってるのかと思った
>>244は無視して
0246デフォルトの名無しさん2012/02/08(水) 00:59:55.63
>>243
乙
一般に低水準(低級)言語と言った場合は機械語かアセンブリ言語を指す
0247デフォルトの名無しさん2012/02/08(水) 01:16:48.07
>>240
0248デフォルトの名無しさん2012/02/08(水) 01:21:06.85
www
0249デフォルトの名無しさん2012/02/08(水) 01:27:33.93
変数が多く、重い様に感じます
どのようにすれば軽くなりますか?
また、ifよりswitchを使用したほうが重くなるのでしょうか?

http://codepad.org/KPVko90j
0250デフォルトの名無しさん2012/02/08(水) 01:29:36.88
>>249
うっせーバカ
0251デフォルトの名無しさん2012/02/08(水) 01:31:49.96
>>249
最適化オプションいれてみた?
-Osとか-O3とか
0252デフォルトの名無しさん2012/02/08(水) 01:34:03.04
だから厳密な定義なんてないっての
http://stackoverflow.com/questions/5020246/how-low-does-c-go-as-a-low-level-language
こんだけ盛り上がる話題だぞ
■ このスレッドは過去ログ倉庫に格納されています