- 1 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 12:49:22 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 22 pc11.2ch.net/test/read.cgi/tech/1196489491/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 101 pc11.2ch.net/test/read.cgi/tech/1197132472/
- 116 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:23:18 ]
- >>115
unsigned なら論理シフトだが、 signed の場合にどうするかは規格で決められていない。処理系定義。
- 117 名前:115 mailto:sage [2007/12/25(火) 01:25:34 ]
- >>116
ぅぉ、マジカ。知らんかった…トンクス。
- 118 名前:デフォルトの名無しさん [2007/12/25(火) 01:27:04 ]
- >>112
なるほど・・・。 int a = 5; だとしたら、S2構造体の 5番目の変数 i にアクセスしてるってことなんですね。 S1-> となってるのは、なんでなんでしょうか?
- 119 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:29:09 ]
- S1-> なんてできるはずがないんだが。
- 120 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:31:30 ]
- × S2構造体の 5番目の変数 i
○ S1 のメンバである、無名の構造体の配列 S2 の 5 番目の要素の、メンバ i
- 121 名前:デフォルトの名無しさん [2007/12/25(火) 01:32:23 ]
- >>119
そうなんですか? 至るところで、 S1-> をやってます。。そもそもなんで入れ子なんだろう・・・構造体要素1個なのに 至るところで入れ子やってます・・。
- 122 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:33:46 ]
- struct {
struct { int i; HANDLE h; } S2[100]; } S1[1]; となってないか?
- 123 名前:デフォルトの名無しさん [2007/12/25(火) 01:36:54 ]
- >>120
「S2」は「構造体の配列名」であって、「構造体名」ではないんですね。 構造体名は無名なんですね。 メンバ i は、構造体配列 S2 の5番目の要素の無名構造体のメンバ i って感じでしょうか。
- 124 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:41:05 ]
- まあ言葉で表現すると難しいが、とりあえず
こいつのことだ ↓ S2[100] [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] ... [i | h] S2[0] S2[1] S2[2] S2[3] S2[4] S2[5] S2[6] ... S2[99]
- 125 名前:デフォルトの名無しさん [2007/12/25(火) 01:41:56 ]
- >>122
あ、すみません! S1->S2[a].i = 001519 ; をやる前に、 struct S1 *S1 ; となってました。 この場合、また型名と変数名が同じなので、 S1-> がどっちを指してるか分からないのですが・・・(n
- 126 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:42:53 ]
- >>125
単に構造体タグ名と変数名が同じというだけだな。 S1-> の S1 は変数名。
- 127 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:45:39 ]
- 001519 ってのが凄く気になる。
こう書くと 8 進数になるけど 9 ってのが入ってて、 エラーになるはずだが。
- 128 名前:デフォルトの名無しさん [2007/12/25(火) 01:49:53 ]
- >>124
どうもご丁寧にありがとうございます。 なるほど。分かり易いです。 >>126 struct S1 *p ; p-> ってことですね。なんで分かるんですかぁぁ・・?? p-> だとすると、なんでわざわざポインタ型にして、入れ子の中の構造体に アクセス??あああ訳が分からない・・・・結局 i には何が入っているの・・・
- 129 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:56:13 ]
- >ってことですね。なんで分かるんですかぁぁ・・??
構造体タグ名を使って S1-> という風にはできないから S1 は何らかのポインタであるはずだ、ということになる。 C だと構造体タグ名と同名の変数を作る事はできるけど、普通は紛らわしいのでやらない。 >結局〜 例えば struct S1 hoge; struct S1 *S1 = &hoge; とした場合、S1->S2[a].i は hoge.S2[a].i と同じことになる。
- 130 名前:デフォルトの名無しさん [2007/12/25(火) 01:59:49 ]
- >>127
すみません。001519 に入ってる値は、ビット演算子で時分秒をいろいろ ゴチャゴチャやっていた値が入っていて、ビット演算子がよく分からなかったので、 >>105 の書き込み時間を適当に入れてみただけなんです。 晒してしまうと、 struct tm tagTime; pstm = &tagTime; nRunTime = /* 時分秒設定 */ (((((((pstm->tm_hour / 10) << 4) | (pstm->tm_hour % 10)) << 8) | ((pstm->tm_min / 10) << 4) | (pstm->tm_min % 10)) << 8) | ((pstm->tm_sec / 10) << 4) | (pstm->tm_sec)) << 8 ; S1->S2[a].i = nRunTime ; ってなことをやってます。
- 131 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:01:03 ]
- まあ、ちゃんとやってるのならいいのよ。
- 132 名前:デフォルトの名無しさん [2007/12/25(火) 02:03:20 ]
- #include<stdio.h>
int gcm(int a,int b); int gcm(int a,int b){ int amari; if( a < b ){ while(1){ amari = b % a; if( amari == 0 ){ return amari; break; }else{ a = b; b = amari; } } }else{ while(1){ amari = a % b; if( amari == 0 ){ return amari; break; }else{ b = a; a = amari; } } } }
- 133 名前:デフォルトの名無しさん [2007/12/25(火) 02:04:01 ]
-
int main(void){ int x,y; int ans; printf("*********最大公約数の計算をします********\n\n\n"); printf("1つ目の整数値を入力してください:"); scanf("%d",&x); printf("\n2つ目の整数値を入力してください:"); scanf("%d",&y); ans = gcm(x,y); printf( "\n\n\nGCM(%d %d) = %d", x, y, ans); return 0; }
- 134 名前:デフォルトの名無しさん [2007/12/25(火) 02:06:00 ]
- >>132
>>133 ユークリッドの互助法のプログラムを書いてみたんですが、 二つの数値入力してエンターキー押したらコマンドプロンプトの画面がすぐ消えてしまいます。 自分ではこれであってると思うのですがどこがおかしいか見てもらえますか。 お願いします。
- 135 名前:デフォルトの名無しさん [2007/12/25(火) 02:07:28 ]
- >>129
>S1->S2[a].i は hoge.S2[a].i と同じ が難解すぎる・・・orz >>129を考えながら寝ることにします。 夜分遅くまでお付き合いいただき、大変ありがとうございました! おやすみなさい。
- 136 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:08:21 ]
- >>134
Ctrl+F5 で実行すると消えない。 あるいは、最後にもう1つ入力をいれておくか。 まあ、まだバグがあるようだが、それは考えてくれ。
- 137 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:09:10 ]
- >>135
図を書くといいよ。
- 138 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:10:18 ]
- >>134
一瞬で終わる計算なんだからそれで正しいだろう
- 139 名前:デフォルトの名無しさん [2007/12/25(火) 02:15:39 ]
- >>136
>>138 Ctrl+F5なら消えないんですかほむほむ。 return amariを return bに直したら正常に計算する事ができました。 ありがとうございます。
- 140 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:20:07 ]
- >>135
(*S1).S2[a].i と同じではどうだ。
- 141 名前:デフォルトの名無しさん [2007/12/25(火) 09:48:22 ]
- 失礼します。
現在、MSNメッセンジャーで受信したメッセージから特定のコマンドを抜き出して 別のアプリケーションへ送るというソフトを作ろうとしています。 そこで、まず、あらかじめアクティブにしておいたメッセンジャーで受信した文字列を 1秒間隔でCTRL+A CTRL+Cを利用して取り込む・・・という方法を調べているのですが分かりません。 どなたか答えていただける方がいればよろしくお願いいたします。
- 142 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:57:58 ]
- >>141
メッセンジャーでやったことはないけど 直接ウインドウテキスト取れないか?
- 143 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:58:48 ]
- >>141
スレ違い。 VisualC++スレへ。 pc11.2ch.net/test/read.cgi/tech/1196430042/
- 144 名前:デフォルトの名無しさん [2007/12/25(火) 10:02:25 ]
- >>142
SetWindowText()ってやつでしょうか? >>143 あれ・・・ここじゃだめなんでしょうか?
- 145 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 10:14:18 ]
- >>144
スレタイ読める?
- 146 名前:デフォルトの名無しさん [2007/12/25(火) 10:17:47 ]
- >>145
いや、C言語・・・。
- 147 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 10:18:40 ]
- >>146
Win32API質問箱 Build60 pc11.2ch.net/test/read.cgi/tech/1196874830/
- 148 名前:デフォルトの名無しさん [2007/12/25(火) 10:42:28 ]
- >>146ですが移動します。
- 149 名前:デフォルトの名無しさん [2007/12/25(火) 11:57:03 ]
- 初心者ですが。
データ型って意味あんすか?・・・ signed long intとか long intと同じじゃないすか? undigned型とかって使ったりすんでしょうかね?
- 150 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 12:05:08 ]
- >>149
long intはsigned long int の省略みたいな物だからまあ同じだろうね unsignedは使うだろ signedで桁数が足りなくて、負数を扱わない時とか
- 151 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:05:17 ]
- >>149
・-(マイナス)の値がありえない変数のバグ防止 ・char型については、signedを指定しないときの符号の有無は処理系依存 意味無いものなんて無い。必要に応じて使い分けるべし。
- 152 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:01:54 ]
- %lfで表示すると0.0000とかになるんですが、
eを使って表示させると6.111e-20とか、計算誤差の分が表示されてしまいます。 解決する方法はありますか?
- 153 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:17:04 ]
- >>152
どう表示させたいのかわからない。 %3.1e とか?
- 154 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:26:40 ]
- >>153
eを用いて表示させたいんですが、精度は小数点以下5桁ぐらいで、それいじょうはeの表示に反映させないようにしたいです
- 155 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:33:16 ]
- こんな感じか
if (fabs(x) < 0.00001) { x = 0; } printf("%e", x);
- 156 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:36:21 ]
- >>155
0のときだけじゃなく、どんな数字にたいしても精度を切り捨てたいんです
- 157 名前:デフォルトの名無しさん [2007/12/25(火) 15:50:41 ]
- いま、ポインタとファイルオープンまで学んだんだが。
あんたら何作ってる? 俺はアドレス帳など作ってみたんだが他にやりがいのある物はないか?
- 158 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:58:25 ]
- オセロとかテトリスとか簡単なゲームなんかどうかな
- 159 名前:デフォルトの名無しさん [2007/12/25(火) 16:06:06 ]
- テトリスとか敷居高そうっすね。
物体が動くようにしたり
- 160 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 16:17:08 ]
- >>156
つ[%.5g]
- 161 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:05:39 ]
- 正数同士の除算の切捨て誤差を
四捨五入で求めたいのですが、 どういう風に書けばいいでしょうか。 今は下記のようにしています。 int n,m,d n = m / d; if( (m % d) > (d >> 1) ) n ++;
- 162 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:20:57 ]
- それのどこが切り捨て誤差?
- 163 名前:デフォルトの名無しさん [2007/12/25(火) 17:26:47 ]
- そもそも整数演算で打ち切り誤差など発生しない。
- 164 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:30:17 ]
- >>160
うまくいきません。6.111e-20とかでてきます。
- 165 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:30:43 ]
- >>164
どう表示させたいのかわかんあいんだよ
- 166 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:36:17 ]
- >>165
double型の変数の 小数点以下、例えば5桁だけを利用して表示したいんです。 0.000000002121なら0を表示したいです。 数がでかくなったらeを使ってすっきり表示したいです
- 167 名前:デフォルトの名無しさん [2007/12/25(火) 17:42:13 ]
- #include<stdio.h>
char pai[3][9] = { {'1','2','3','4','5','6','7','8','9'}, {'@','A','B','C','D','E','F','G','H'}, {'一','二','三','四','伍','六','七','八','九'}, }; int main (void){ printf("%c",pai[0][2]); return 0; } これで3という文字が表示されるはずなんですがうまくいきません。 どうなおせばいいのでしょうか。
- 168 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:43:44 ]
- >>166
こうか? if(fabs(x)>=1000){ printf("%e", x); }else{ printf("%f", x); }
- 169 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:46:20 ]
- >>167
Warningいっぱい出なかった? 3はマルチバイト文字だから、'3' とやったら半分しか入らんぞ
- 170 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:48:37 ]
- >>166
二度手間だけど、丸めと表示の二段階で行なう。 void print(double foo) { char buf[20]; sprintf(buf, "%.5g", 1 + foo); printf("%.5g", atof(buf) - 1); }
- 171 名前:デフォルトの名無しさん [2007/12/25(火) 17:50:40 ]
- >>166
自分の好きにフォーマットをコントロールしたいなら、 もうprintfのフォーマット機能に頼らず、 自分でフォーマットするプログラムを書いた方が早くないか? いや、そんな気がする。どうだろう?
- 172 名前:デフォルトの名無しさん [2007/12/25(火) 18:18:21 ]
- てす
- 173 名前:デフォルトの名無しさん [2007/12/25(火) 18:27:50 ]
- >>169
3をいれるのにはどうやればいいんですか?
- 174 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:35:19 ]
- >>173
そりゃキミがどうしたいのかによって変わってくるが・・・ char pai2[3][9*2+1] = { {"123456789"}, {"@ABCDEFGH"}, {"一二三四伍六七八九"}, }; printf("%c%c",pai2[0][2*2],pai2[0][2*2+1]); これでも一応出るんで、あとは考えて。
- 175 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:36:41 ]
- >>167,173
●文字列にする方法 char pai ⇒ const char *pai '3'など ⇒ "3" printf() ⇒ printf("%s", ... ●ワイド文字にする方法 char pai ⇒ wchar_t pai '3'など ⇒ L'3' printf() ⇒ wprintf(L"%lc", ... かなあ? いまいち自信なし。
- 176 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:18:52 ]
- >>167
char pai[3][9] = { {'1','2','3','4','5','6','7','8','9'}, {'@','A','B','C','D','E','F','G','H'}, {'一','二','三','四','伍','六','七','八','九'}, }; ↑この時点でスタック壊してるな。 何が起こっても不思議ではない。 ワイド文字にしたほうがよい。 >●ワイド文字にする方法 >char pai ⇒ wchar_t pai >'3'など ⇒ L'3' >printf() ⇒ wprintf(L"%lc", ... 処理系がわからんが、VCなら L'3' じゃなくて_T('3')のほうがいい。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:38:19 ]
- >>161
n = (m+0.5)/d;
- 178 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:53:57 ]
- >>176
ワイドじゃないとダメだから _T にしたらあかんがな。
- 179 名前:デフォルトの名無しさん [2007/12/25(火) 23:07:29 ]
- 某サイトの問題をやってみました。
【問題】 文字列Aのm番目からn個分の文字列を配列Bにコピーする サブルーチンを作れ。 ただし、m,nの値が文字列Aの範囲を超えるような値が入力 されたら1を返し、正常にコピーできたら0を返す。 こんなプログラム組みました。 問題中のm,n,文字列A,Bの各オブジェクト名,サブルーチンの返値は 勝手に解釈して組んでます。(正常時TRUE(1),異常時FALSE(0))
- 180 名前:デフォルトの名無しさん [2007/12/25(火) 23:08:45 ]
- #include <stdio.h>
#include <string.h> #define STR_MAX 10 #define TRUE 1 #define FALSE 0 typedef unsigned short BOOL; BOOL BlockCopy( unsigned char*, unsigned char*, short, short ); // メイン関数 int main( void ) { unsigned char szSrcName[STR_MAX+1]; unsigned char szDstName[STR_MAX+1]; short nStartPos = 0; short nCopyLen = 0; printf( "Input Str : " ); scanf( "%10s", szSrcName ); printf( "Input StartPosition : " ); scanf( "%d", &nStartPos ); printf( "Input CopyLength : " ); scanf( "%d", &nCopyLen ); if( BlockCopy( szDstName, szSrcName, nStartPos, nCopyLen ) == FALSE ) { puts( "Error!!" ); return 1; } printf( "入力文字列 : %s\n", szSrcName ); printf( "コピー文字列 : %s\n", szDstName ); return 0; }
- 181 名前:179,180 [2007/12/25(火) 23:09:25 ]
- // サブルーチン関数
BOOL BlockCopy( unsigned char* s1, unsigned char* s2, short m, short n ) { int i; short nLen = strlen( s2 ); if( nLen < m || nLen < (m+n) || nLen < n ) return FALSE; memcpy( s1, s2+m, sizeof(char)*n ); return TRUE; } 動作的には問題ないと思ってますがアドバイスお願いします。 また、この組み方はセンスないぞと思われる方は、よりよい プログラムの組み方を教授して頂ければ幸甚です。
- 182 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 23:20:56 ]
- Windows2003Server上でVMware Serverを使ってRHE3を動かしてます。
その上でlibjpeg.soを使ったjpeg圧縮ライブラリを作りましたが、 jpeg_create_compress()を実行した時点で以下のメッセージが出て先に進みません。 JPEG parameter struct mismatch: library thinks size is 372, caller expects 376 構造体のサイズが合っていないと言ってるのはわかるのですが、 libjpeg.soとjpeglib.hのVerは合わせてありますし、 同じ名前のファイルが複数存在しない事も確認済みです。 どなたか解決方法を知らないでしょうか?
- 183 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 23:40:13 ]
- >>181
・無闇とshortを使うのはよくない。 ・sizeof(char)が1であることを前提としている関数を使うのにsizeof(char)を掛けるのはおかしい。 ・「文字列をコピーする」関数なのだから、ナルターミネートは保証するべき。 ってことで、判定部を除くとこれでいい。 sprintf(s1, "%.*s", n, s2 + m);
- 184 名前:デフォルトの名無しさん [2007/12/25(火) 23:55:05 ]
- C言語でポートを選び、指定して
相手とファイルをやり取りするってプログラムを作りたいんだが。 どんな関数とか使うんだ?接続など
- 185 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 23:57:46 ]
- >>184
環境と使うライブラリによって違う。
- 186 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:05:04 ]
- 相手==
- 187 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:13:18 ]
- >>180
その手の文字列処理関数は、コード見ないとどの引数が入力でどれが出力か分からないから、 プロトタイプ宣言だけで分かるようにconst付けたり仮引数名を工夫したりするといい BOOL BlockCopy(unsigned char* dst, const unsigned char* src, short, short );
- 188 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:24:37 ]
- >>182
.so と .h の不整合ではなくて、.so を作ったときのコンパイラ(構造体 のパディング)とそれを利用するプログラムのコンパイラ(構造体のパディ ング)が違うんだろう。
- 189 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 08:30:05 ]
- >>182
#pragma pack(push,4) #include"jpeglib.h" #pragma pack(pop) もしくはコンパイルオプションで指定
- 190 名前:182 mailto:sage [2007/12/26(水) 10:42:05 ]
- >>189
#pragma指定を追加する事で無事にプログラムが流れました。 gdbで構造体を確認しましたが壊れている様子もありませんでした。 どうもありがとうございました。
- 191 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 14:01:12 ]
- printf("%.4s", s);
の%.4sってどういう意味でしょうか?
- 192 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 14:08:20 ]
- >>191
最小幅と最大幅の指定のうち、最小幅を省略したもの
- 193 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 14:45:17 ]
- >>192
ありがとございました。
- 194 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:07:06 ]
- 質問いいですか
#include <stdio.h> int main(void) { printf("%d\n",10*2); return 0; } この場合関数の型名ってあんまり意味ってないんですよね? 変数宣言などするときに意味があったりするんですか?
- 195 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:16:37 ]
- もうちょっと何が聞きたいのかはっきりしてくれ。
関数ってどっちの関数?main?printf? 型名って何の型名?引数?戻り値?
- 196 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:21:20 ]
- >>194
質問の意味がよくわかんね printfは可変長引数 floatとか使いたいとき明示的に 接尾子のfを付けたりする
- 197 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:24:32 ]
- main の戻り値に意義が見いだせないという事なのか、
それとも printf の戻り値を使ってないという事に関する疑問か。
- 198 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:43:08 ]
- うぉ・・・エスパーできん・・・
- 199 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:48:27 ]
- これは10*2に対して、一時変数に格納する意味なんて無いよね?っていうことでは
- 200 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:51:30 ]
- >>195
だって苦しむなんちゃらには 型名 関数名(引数){なんちゃら} で関数って書いてあったんだもの>< >>199 そのとおりでございます
- 201 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:04:26 ]
- >>200
やっぱりわかんね。 int temp = 10 * 2; printf("%d\n",temp); と printf("%d\n",10*2); は、最適化されて同じバイナリが吐かれるよね?、ということを聞いてる?
- 202 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:08:03 ]
- あー printf にも戻り値は int型 って関数バイブルみたいな本に書いてあったな。
そういうことじゃ?
- 203 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:09:55 ]
- >>201
#include <stdio.h> int main(void) { printf("%d\n",10*2); return 0; } の場合intは文的には必要だが機能としてはまったく意味はない??が #include <stdio.h> int main(void) { printf("%d\n",(int)(1.05 * 360)); return 0; } のようにキャスト変換などするとintが使用されるっていうか 意味があるっていうか・・・・ そんな感じです
- 204 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:11:45 ]
- >>203
そもそも関数の型の意味を理解していないな。 int mainのintは戻り値(OSに正常終了か否か)をreturn 0 か1かで必要だからint mainなんだよ。
- 205 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:13:56 ]
- >>204
まだそこまでたどりついてません・・・ 今苦しんでのキャスト変換のところなんで もっと勉強すればわかることなんですね
- 206 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:17:41 ]
- >>203
関数の戻り値が分かってない? これは何をしているかわかる? int unko(int x) { int z = x*2; return z; } int main() { int temp = unko(100); return 0; }
- 207 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:18:11 ]
- キャスト変換はただその時の型を「一時的に強制的のその型にする」って理解すればいいと思うよ。
int main(void) { 〜〜〜 return 0; } は、関数の章で学ぶと思うから、 今は明示的に書かなければならないと思っておけばOK。 あまり先飛びすぎても混乱するだけだしね。
- 208 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:46:21 ]
- >>203
整数リテラル 10 はそれ自体としてintという型を持っている。 整数リテラル 2 もintで、int*intの結果はint型になることになっている。
- 209 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:52:30 ]
- ってそういうことじゃないのか。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:03:58 ]
- >>194
とりあえず総じて何が聞きたいのか理解できん。 まずはここあたりを順に読んで、基本を覚えよ。 ttp://homepage1.nifty.com/toshio-k/prog/c/
- 211 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:29:52 ]
- >>205
そのサイトは地雷原だから、他で勉強することを強くお勧めする。
- 212 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:31:17 ]
- www9.plala.or.jp/sgwr-t/
ここオヌヌメ 友達から教わったけど、ここだけでCの基礎はバッチリ・・・?覚えたよ ていうかC言語でググると一番上に出てくる
- 213 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:43:51 ]
- >>212
あー、間違いをそれと知らずに教わるにはいいかも。
- 214 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:44:32 ]
- どういうこっちゃ?
- 215 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:46:46 ]
- 今時 C から始めるのは損だよ。
C++ の本でも最初のうちは C と似たようなもんだし、 その延長で C++ まで覚えてしまった方が絶対得だよ。
- 216 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:47:18 ]
- いきなりC++はどうだろうか。
C++はしょっぱなからクラス教えないっけ?
|

|