C言語なら俺に聞け(入門篇) Part 42
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/06(火) 03:30:05教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 121代目
http://pc11.2ch.net/test/read.cgi/tech/1230678123/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 41
http://pc11.2ch.net/test/read.cgi/tech/1229639514/
過去スレ
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
0002デフォルトの名無しさん
2009/01/06(火) 03:34:550003デフォルトの名無しさん
2009/01/06(火) 03:40:11/ // /| r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、., / /
/ / | |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''" ヽ、_'´ `| |:::::|'" 二.,_> ,.へ_
/ //__// / / / `ヽ7::/
か っ も | / // メ,/_,,. /./ /| i Y //
ァ て う. |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ , |〉
| 約 ク ヽ! O .|/。〈ハ、 rリ '´ ,ァ=;、`| ,ハ |、 /
| 束 ソ > o ゜,,´ ̄ . ト i 〉.レ'i iヽ|ヽ、.,____
| し ス / ハ | u ,.--- 、 `' ゜o O/、.,___,,..-‐'"´
| た レ | / ハ, / 〉 "从 ヽ! /
| じ は |,.イ,.!-‐'-'、,ヘ. !、_ _,/ ,.イヘ. ` ヽ.
ッ .ゃ .立 |/ ヽ!7>rァ''7´| / ', 〉`ヽ〉
! ! な て .', `Y_,/、レ'ヘ/レ' レ'
い .な ヽ、_ !:::::ハiヽ. // /
で い ./‐r'、.,_,.イ\/_」ヽ ', / /
す / `/:::::::/ /,」:::iン、 / /
〈 ,,..-‐''"´ ̄ ̄77ー--、_\.,__ /
,.:'⌒ヽ ´ | | , i |ノ `ヾr-、
0004デフォルトの名無しさん
2009/01/06(火) 03:53:441.書き込みウィンドウを出し半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
0005デフォルトの名無しさん
2009/01/06(火) 03:56:36main(){
int kekka = 0;
unsigned char soeji[] = { 4, 3, 2, 1 };
unsigned int deta[] = { 0, 100, 200, 300, 400 };
kekka = deta[(soeji[3])];
}
この
deta[(soeji[3])]
という表記は使っても大丈夫でしょうか?(kekkaに100が入ってる?)
また添え字になるならsoeji[]はunsigned charよりunsigned intの方が
処理速度的にはよいのでしょうか?
よろしくお願いします。
0006デフォルトの名無しさん
2009/01/06(火) 04:52:57大丈夫。括弧は特に要らない。
入るだろう。
大抵はそうだが一概には言えない。
0007デフォルトの名無しさん
2009/01/06(火) 08:26:37処理速度を気にするのであれば、int を使うべき
0008897
2009/01/06(火) 12:48:41ファイルから新しいプロジェクトをクリックするとForm1小さなウインドウが出てきますがこれは何ですか?
あとプログラムを入力して出力させたいのですがどういった手順で出力させるのか教えてください。
初心者すぎてごめんなさい。
0009デフォルトの名無しさん
2009/01/06(火) 13:06:39VisualStudioスレ辺りで教えて貰う方がいいよ。
ここはVS使ってない人も多いし、言語スレであってコンパイラ操作方法スレじゃないから。
0010デフォルトの名無しさん
2009/01/06(火) 13:06:56Visual Studio 2008 Part 14
http://pc11.2ch.net/test/read.cgi/tech/1230008197/
このスレにこれるんだったら検索すれば分かるだろ?
0011デフォルトの名無しさん
2009/01/06(火) 13:18:20インターフェースなどをぺたぺた貼り付けている感覚だな・・・
0012デフォルトの名無しさん
2009/01/06(火) 13:23:56インストールしなおしたほうがいいような気がするけど
0013897
2009/01/06(火) 13:39:20プログラミングの勉強がしたいのですが、、、。
0014デフォルトの名無しさん
2009/01/06(火) 13:44:10OSがサポートするインターフェースを簡単に取り込みやすくなっているが。
かといって、それを使うようなプログラムでなければ、別に無理に使う必要もない。
まぁ、手軽にBCCを選ぶ人も少なくないようだが。
0015デフォルトの名無しさん
2009/01/06(火) 13:48:06メインの1つとしてかなり使っているのですが、、、。
0016デフォルトの名無しさん
2009/01/06(火) 13:53:01必要でなければ必ず使わなければならないものでも無い人は
手軽に扱えるBCCなどを選ぶ人も少なくはない。
0017デフォルトの名無しさん
2009/01/06(火) 13:58:07>14とか>16くらいだな。
0018デフォルトの名無しさん
2009/01/06(火) 13:58:15コマンドラインでコンパイルすればいいだろ。 そしたらgccとかccとか発動する名前が違うだけ。
0019デフォルトの名無しさん
2009/01/06(火) 14:01:010020デフォルトの名無しさん
2009/01/06(火) 14:02:57いつもbccをつかう。
0021デフォルトの名無しさん
2009/01/06(火) 14:03:190022デフォルトの名無しさん
2009/01/06(火) 14:04:48VS上でプロジェクトを作るんじゃなくてまず.cファイルを書いてからそれをVSで開けばいい
そうすれば単なるCのプログラムとして作れる
のかな? BCBではそうなんだけど
0023デフォルトの名無しさん
2009/01/06(火) 14:05:38とりあえず専用スレで聞いた方がいいが、このスレでやりたいことなら
プロジェクト作る時にWin32のWin32コンソールアプリケーションで始めるといい。
CLRはそれが意味することがわかるまで一切さわらんほうがいいよ。
0024デフォルトの名無しさん
2009/01/06(火) 14:07:59complie.bat というファイルに書いてクリックでも言い。
cl test.cpp > err.txt
0025デフォルトの名無しさん
2009/01/06(火) 14:09:23いや、お前が単にVC厨なだけ。それだけを使っている人は多くないだろうけど
少なくないの言葉の意味が分からないなら、大学にでも通ってみろ、低学歴
0026デフォルトの名無しさん
2009/01/06(火) 14:10:18あと、VSはこのスレにある、C言語のみの環境じゃないから。
かといって、C言語のスレでVisualは直接的ではないんで、あしからず。
0027デフォルトの名無しさん
2009/01/06(火) 14:11:23次のようなバッチファイルを実行すると言い.
test.exe
dosでキー入力を待つ命令
0028デフォルトの名無しさん
2009/01/06(火) 14:13:05宿題スレも見てみな。使っている人は 少なく ないから。
あと、VSが無くてもC言語は扱えるし。ここ、C言語スレだよ?
VSがいくら無償で使えるからって、別に無理に使わなくても良いし、
お前みたいな奴は、あのAPIを使うことがプログラミングだと思っているようだし。
たまには、ダイナミックHTMLでも扱ってみれば?
0029デフォルトの名無しさん
2009/01/06(火) 14:14:30鏡を見てご覧、顔真っ赤な学歴コンプレックスな阿呆が見えるよ、きっと。
0030デフォルトの名無しさん
2009/01/06(火) 14:16:11日本語の勉強が必要そうな人は、無理に回答しなくてもいいってご存知ありませんでしたか?
0031デフォルトの名無しさん
2009/01/06(火) 14:17:01いちいちプロジェクトがどうとか、ソースコード以外のごちゃごちゃした管理をするところまで
覚えなければならないのは、初心者にとっては手軽とはいえない。
0032デフォルトの名無しさん
2009/01/06(火) 14:17:38初心者がCをやってみたいなら、VSだと混乱をまねく部分が多そうって事。
これはVSとbccやgccの両方使ったことがある人なら同意してくれると思うんだけど。
0033>14,16,25,26とかw
2009/01/06(火) 14:20:10まぁ、プログラミング以前で躓きそうな人も多そうだから敢えて薦めないが。
0034デフォルトの名無しさん
2009/01/06(火) 14:22:47ただ、初期の環境設定(include や lib のパス通し)は
VSだとインスコ段階で確定されてるから少し楽かも?
# bcc で エラー出るんだけど → include パス通って無かった ってオチが多いのもまたw
0035デフォルトの名無しさん
2009/01/06(火) 14:23:09> C言語の入門者向け解説スレです。
> ・C++言語はスレ違いです。
いい加減、Visualが付く製品は専用スレに誘導しろ。
手軽さに於いては、BCCは使われている方だよ。
C言語を習うのにUNIX、Linux系でも良いが、それを使っている人なら
MS製品のVSの話なんて場違いだしな。自分はVS使ってます宣言はしなくて良いから。
あと、初心者があれを使うのに、果たしてC言語の入門として使い方まで覚えるのに
時間や手間をかける意味があるとも思えん。何のためにVisualなのか、考えろ。
普通自動車の運転もまともに出来ない奴に、いきなり大型を扱わせるようなもの。
0036デフォルトの名無しさん
2009/01/06(火) 14:25:13この例えは、、、
Visualなら大型だがAT、gccなら普通自動車だけどMT車ってとこだな。
0037デフォルトの名無しさん
2009/01/06(火) 14:27:18まずは試してみて。 下のは統合環境だけど、bccコンパイラだけ使わしてもらう。
本家から落とすと手間取るため。
エディタ http://www.vector.co.jp/soft/winnt/prog/se466561.html?ds
コンパイラ http://www.vector.co.jp/soft/win95/prog/se326602.html?ds
0038デフォルトの名無しさん
2009/01/06(火) 14:28:16http://www.vector.co.jp/soft/win95/prog/se149182.html
0039デフォルトの名無しさん
2009/01/06(火) 14:28:43あとは拡張子を.cにするくらいで簡単に使えるけどな〉VC
でも個人的にはCPadの方がオススメ
004037 , 38
2009/01/06(火) 14:29:43いるなら、動かせる所まで教えてやるぜ
0041デフォルトの名無しさん
2009/01/06(火) 14:30:180042デフォルトの名無しさん
2009/01/06(火) 14:32:050043デフォルトの名無しさん
2009/01/06(火) 14:34:21何が含まれているか、確認しろ。あと、MS製品だから。
C言語の質問スレでは明らかに製品そのものの質問はスレ違い。
C言語に関わる質問を受け付けるスレだぞ。C++だってスレ違いなんだし。
>>1 読め > VSの話をしている奴ら
> ・C++言語はスレ違いです。
0044デフォルトの名無しさん
2009/01/06(火) 14:40:090045デフォルトの名無しさん
2009/01/06(火) 14:41:00ついでに、勉強するならこれすごいおすすめ
時間はかかると思うけど、間違いなく力つくよ。
http://www.amazon.co.jp/dp/4894710293/
0046デフォルトの名無しさん
2009/01/06(火) 14:42:54MS製品であることに何か問題でも?
>C言語の質問スレでは明らかに製品そのものの質問はスレ違い。
同意。
>C言語に関わる質問を受け付けるスレだぞ。C++だってスレ違いなんだし。
同意。
但し、bccもgccもC++コンパイラでもあるのは周知の事実なので、VCだけを除外する理由はない。
0047897
2009/01/06(火) 14:55:290048673
2009/01/06(火) 15:03:172次元配列のアドレスを代入する場合なんですが
何故、p=(int *)xxx;なんですか?
一次元配列の場合 p=x;だけですむんですが
何故キャストするんでしょうか?
何故int *なんでしょうか?
0049デフォルトの名無しさん
2009/01/06(火) 15:03:49何のためのVisualなのかとか、コマンドプロンプトでVCが使えないと
思っているのかな?
>>47
http://www.setsunan.ac.jp/~center/kyositu/vs2008ex/vs2008ex.html
0050デフォルトの名無しさん
2009/01/06(火) 15:15:41プロジェクトってなに、とかCLRって、とか実行したらすぐ消えたとか。
そういう意味でcl.exeを直接使用する方法を教えるのは悪くないとおもうよ。
0051デフォルトの名無しさん
2009/01/06(火) 15:21:200052デフォルトの名無しさん
2009/01/06(火) 15:27:18すれ違いも甚だしい。他所でやってくれ。
0053デフォルトの名無しさん
2009/01/06(火) 15:29:470054デフォルトの名無しさん
2009/01/06(火) 15:32:29>46
>>48
前スレのおさらいからやり直してくれ。
0055デフォルトの名無しさん
2009/01/06(火) 15:41:12pがint *だからに決まっている
二次元配列へのポインタの型は(type *)[size]
0056デフォルトの名無しさん
2009/01/06(火) 15:49:410057デフォルトの名無しさん
2009/01/06(火) 15:58:420058デフォルトの名無しさん
2009/01/06(火) 16:05:02Cにおいてポインタとは、単なるメモリ上のアドレスを意味する言葉ではない。
それは( void * を除けば)オブジェクトを指し示すものであって、
その指し示すオブジェクトの場所(アドレス)に加えて
「そのオブジェクトの型」というものをポインタの型によって保持している。
char * は char を指し示し、int * は int を指し示す。
int ** は int * を指すポインタで、char (*)[10] は char 10 個からなる配列へのポインタである。
Cはこれらのポインタを(主にポインタ演算の都合上)明確に区別する。
特別なポインタである void * とやりとりするときと、ヌルポインタ定数を扱うときを除き、
ポインタの型を変える場合には(「これはプログラマが意図的に変えたんですよ」ということを
コンパイラに伝えるために)明示的に適切なキャストをつけないと、
多くのコンパイラは不適切な代入が行われた可能性があるとして警告を発する。
コンパイラに警告を発されるということは、君が自分のやろうとしていることを
正しく理解していない可能性が高い。配列の配列やポインタの型変換に手を出す前に、
ただの配列とポインタ演算についてしっかりと学習しておくこと。
0059デフォルトの名無しさん
2009/01/06(火) 16:47:330060デフォルトの名無しさん
2009/01/06(火) 16:55:48ポインタの演算(インクリメント等)が 型の大きさ単位で評価するから
(その型が中身だったとしたら x個目にあたるね って意味合いになる)
char *p = 0;
int *q = 0;
p+1 で指し示すアドレス と q+1 で指し示すアドレスは sizeod(char) と sizeof(int) の差だけ違う
0061デフォルトの名無しさん
2009/01/06(火) 16:55:50いいえ、ポインタは型付けされたアドレスではありません。
0062デフォルトの名無しさん
2009/01/06(火) 16:59:06では一体何であるのかを主張しなければ
0063デフォルトの名無しさん
2009/01/06(火) 16:59:26「入門篇」で深く説明しても解らんだろ。
0064デフォルトの名無しさん
2009/01/06(火) 18:18:14頂けませんか?別のスレが良いのなら行きますので、よろしくお願いします。
というのも、free() で配列のポインタを渡して、なぜ全部開放されるのか、が
よく分からないんです。
0065デフォルトの名無しさん
2009/01/06(火) 18:20:31それはmallocの実装の話で、ポインタの型は関係ない
0066897
2009/01/06(火) 18:32:11これをやってみたのですが指定されたドライブが見つかりません。となってしまいます。どうすればいいでしょうか?
0067デフォルトの名無しさん
2009/01/06(火) 18:32:510068デフォルトの名無しさん
2009/01/06(火) 18:35:340069デフォルトの名無しさん
2009/01/06(火) 18:36:02USBドライブがないのだろ。プログラミング以前のPCの使い方なら初心者板に移動してくれ。
そうでなくても、言語の質問でないならとっとと出て行け。
0070デフォルトの名無しさん
2009/01/06(火) 18:36:590071デフォルトの名無しさん
2009/01/06(火) 18:44:08007264
2009/01/06(火) 18:45:04ポインタって結局なんなのか、よく分からないんですよ。
被参照型を参照するための値をもつオブジェクトとありますよね。なら、
配列のポインタは、実体の先頭しか指していないはず。なのに free に渡すと、
配列全体が開放される…javaみたいに自分の長さを持つ配列なら分かるんですが。
配列の途中のポインタをfreeに渡しても怒られるだけだし…
0073デフォルトの名無しさん
2009/01/06(火) 18:51:13freeするときはそれを参照して解放する範囲を知る
0074デフォルトの名無しさん
2009/01/06(火) 18:51:35そりゃ長さをこっそり持たせてるんだろ。
allocしたときにサイズより大きく取って、先頭に情報入れて
入れた情報の次のアドレス返すとかできるべ。
0075デフォルトの名無しさん
2009/01/06(火) 19:08:22>>73みたいにまず教科書読んで過去問といてみたら。
この段階で分からないようなら、今から勉強しても絶対間に合わないと思う。
007675
2009/01/06(火) 19:08:53007764
2009/01/06(火) 19:09:47何らかの形で領域サイズを持っているはずなのは分かります。
でもfreeは先頭しかうけつけないのは…あぁそうか、開始&終了があるかどうか
だけで良いのか。領域サイズだとlonglong以下に制限されますもんね。
ありがとうございます、freeについては分かった気がします。
あともう一つ、ポインタの値は何ですか?
アドレスでないならハッシュ値みたいなもの?
0078デフォルトの名無しさん
2009/01/06(火) 19:14:49とりあえずdlmallocのソースでも眺めとけ
0079デフォルトの名無しさん
2009/01/06(火) 19:15:34だからといってポインタ=アドレスってわけじゃないからね。
0080デフォルトの名無しさん
2009/01/06(火) 19:17:200081デフォルトの名無しさん
2009/01/06(火) 19:17:41ただし、アドレスとは限らない。
また、アドレスの場合もどうせ仮想化されているので物理アドレスそのものではない。
0082デフォルトの名無しさん
2009/01/06(火) 19:17:54だからといってコップ=水ってわけじゃないからね。
0083デフォルトの名無しさん
2009/01/06(火) 19:18:48というより昔の処理系にあわせて
6文字以内に押し込んでる
0084デフォルトの名無しさん
2009/01/06(火) 19:20:18実装上はmallocからもらうアドレスの手前に次の割り当てた領域の先頭アドレスが入ってて
全体としてリストだかヒープだかを作ってるんじゃなかったっけ
んでfreeはそのアドレスを順繰りに辿っていって記録されたアドレスを更新することで割り当てられた領域を解放する
だからアドレスが記録されている場所を書き換えるとリンクが壊れるのでセキュリティホールになってるとかどーとか
0085デフォルトの名無しさん
2009/01/06(火) 19:25:49生半可な知識をひけらかす必要はありませんよ。
初心者には難しい話ですし、中級者以上には当たり前の話なんですから。
0086デフォルトの名無しさん
2009/01/06(火) 19:27:310087デフォルトの名無しさん
2009/01/06(火) 19:30:54特定のコンピュータでは、それしか使え無いような物もある
基本は一緒
0088デフォルトの名無しさん
2009/01/06(火) 19:31:27正直すまんかった
これからは自重する
0089デフォルトの名無しさん
2009/01/06(火) 19:32:480090デフォルトの名無しさん
2009/01/06(火) 19:33:54このスレ的には最新といったらC99をさすべきだろうwwwwww
だからVCCは古い
009164
2009/01/06(火) 19:34:39皆さんありがとうございます。
malloc, freeについては >>78さんの言葉に従って解説を探し良さげなのを
見つけました。これから読んでみます。
ttp://www.ibm.com/developerworks/jp/linux/library/l-memory/
ポインタの値については、実際の物理アドレスか仮想アドレスを示しうる値、と
いう理解で良いという事ですかね?
0092デフォルトの名無しさん
2009/01/06(火) 19:36:34ブーストの対応表見ると、gccやbccなどは今市だぞ。
0093897
2009/01/06(火) 19:36:56Pathを変える必要があると思うのですがどうしたらいいでしょうか?スレ違いなのでこれで最後にします。
0094デフォルトの名無しさん
2009/01/06(火) 19:42:37スレタイ読め
0095デフォルトの名無しさん
2009/01/06(火) 19:43:11とっとと失せろ
0096デフォルトの名無しさん
2009/01/06(火) 19:43:410097デフォルトの名無しさん
2009/01/06(火) 19:45:05#include <stdio.h>
int main() {
printf("test prog");
}
をメモ帳にコピーして、test.cppで保存して
cl test.cpp > log.txt
をメモ帳にコピーして、complile.batで保存してクリックしてみて。
0098897
2009/01/06(火) 20:04:490099デフォルトの名無しさん
2009/01/06(火) 20:08:200100デフォルトの名無しさん
2009/01/06(火) 20:10:39log.txt開く戸なんて書いてある?
0101デフォルトの名無しさん
2009/01/06(火) 20:12:10製作者が違う。
トヨタもホンダも自動車を作っているが、だからといってトヨタの車とホンダの車が同じわけがない。
■ このスレッドは過去ログ倉庫に格納されています