X



C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
垢版 |
2017/08/10(木) 20:21:23.44ID:hEocmkh50
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0880デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
垢版 |
2017/10/21(土) 20:38:07.37ID:LO7dvffl0
グローバル変数をregister指定できたり楽しかったなあ
0881デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/21(土) 20:48:45.74ID:S+Fuo4jD0
いや、指定しても実際効果あるか無いかってだけだからなぁ
0883デフォルトの名無しさん (ワッチョイ cee7-gNqP)
垢版 |
2017/10/21(土) 23:00:30.68ID:qfiVibk/0
10年前にC言語覚えたなC#もないopenGL作る時も基礎が出来てない白紙から打ち込んでたから凄い大変だったのを思い出したわ
0884デフォルトの名無しさん (ワッチョイ a593-+4Iz)
垢版 |
2017/10/22(日) 05:28:16.50ID:m20yJ7cw0
register宣言とアドレス演算子の話だけど、
Cではエラー、C++だとアドレスを取れる(register指定は無視される)、みたいね。
望洋さんのファックとWikipediaのC++に出てたわ。

…実は逆に覚えててね。
レジスタに割り当てた変数の変数のアドレスが欲しいってのは矛盾してるから、
C++は厳格にチェックするかと。
0885名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a127-1OZr)
垢版 |
2017/10/22(日) 07:11:33.28ID:dj2Vz85u0
>>884
俺もそう思う
registerはprvalueであるべき
0888名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/22(日) 12:31:48.51ID:NaoIEEjs0
世の中には、レジスタがメモリーの先頭と同じ位置にマッピングされてるCPUだってあるけどな。
0889名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 3a23-0GSP)
垢版 |
2017/10/22(日) 13:39:13.59ID:f5TzHp7R0
質問です。ポインタ変数を用いてキーボードから入力された5つの整数を配列xに保存し、その要素の列挙と合計値を求めるプログラムを作ったのですが、
#include <stdio.h>
#include <stdlib.h>

int main (void){
int *p,x[4],sum=0,i,j;
p=&x[0];
for(i=0;i<=4;i++){
printf("%dつ目の整数を入力してください ",i+1);
scanf("%d",p);
sum=sum+*p; }
for(j=0;j<=4;j++){
printf("%d ",*(p+j));} /*配列の要素を列挙*/
printf("\n和=%d",sum); /*配列の要素の和*/
return 0;}
で、結果が
1つ目の整数を入力してください 1
2つ目の整数を入力してください 2
3つ目の整数を入力してください 3
4つ目の整数を入力してください 4
5つ目の整数を入力してください 5
5 4200864 6422368 4200955 6422288
和=15
となり、要素の列挙がうまくいかないので対策を教えていただきたいです。
0891名無しさん@そうだ選挙に行こう! Go to vote! (ササクッテロラ Sp85-DwBb)
垢版 |
2017/10/22(日) 13:55:57.90ID:pqhboyRRp
素直に配列使え。
0892名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a593-+4Iz)
垢版 |
2017/10/22(日) 14:15:34.40ID:m20yJ7cw0
scanf() での値の格納先 (== sumに加える値の参照先) である p を
初期化時の &x[0] のまま進めてないから入力した値が上書きされるんだよ。
もちろん x[1], x[2], ... には値が入らない。


質問の趣旨と関係ない部分を指摘して混乱させるつもりはないんだけど、
配列 x[] の要素数が足りないのがオジさん気になるなぁ。
0893名無しさん@そうだ選挙に行こう! Go to vote! (アウアウウー Sa89-PVu7)
垢版 |
2017/10/22(日) 15:12:18.96ID:2+N8xzsVa
>>889
既に>>890-892が指摘済みだけど

#include <stdio.h>
#include <stdlib.h>

int main (void){
int *p,x[5],sum=0,i,j; /* x[5] */
p = x;
for(i = 0;i <= 4; i++, p++){
printf("%dつ目の整数を入力してください ",i+1);
scanf("%d", p);
sum += *p;
}
p = x; /* ポインタの参照位置を配列先頭へ */
for(j = 0; j <= 4; j++){
printf("x[%d]=%d, ", j, *(p+j) );
}/*配列の要素を列挙*/
printf("\n和=%d\n ",sum); /*配列の要素の和*/
return 0;
}
0895名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/22(日) 15:27:37.67ID:NaoIEEjs0
まあ、なんでポインタに拘るのかわからんが、
つうか、書きと読みでアクセス方法は合わせた方がいいと思うが、
動きゃいいかw
0897名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ cee7-h3yZ)
垢版 |
2017/10/22(日) 16:41:26.75ID:iiKpFSsu0
起動の度に外部ファイルで変数の初期値を変えて起動したいんだけどどうすんの?
0899名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ cee7-h3yZ)
垢版 |
2017/10/22(日) 17:06:30.45ID:iiKpFSsu0
外部ファイルに変数名と初期値を書いておきたい
0901名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a593-+4Iz)
垢版 |
2017/10/22(日) 18:05:00.75ID:m20yJ7cw0
ソースに書いてない変数を実行時に導入したいってのとは違うんでないか?
あらかじめ外部ファイルで値を設定できる変数は決まっていて、
要するにリソースファイルみたいな使い方をしたいのかも知れん。

fscanf(fp, "%s=%d\n", varname, &varval);
if (strcmp(varname, "width") == 0) {
 width = varval;
} else if (strcmp(varname, "height") == 0) {
 height = varval;
} else {
 fprintf(stderr, "cannot use variable '%s'\n", varname);
}

みたいな感じ?
この場で書いてるから洗練されてないし、動くか怪しいけど。
0902名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/22(日) 18:08:18.57ID:NaoIEEjs0
人が読み書きしない前提なら、構造体の領域をまるまんま読み書きしてしまえば楽だぜ。
0904901 (ワッチョイ a593-+4Iz)
垢版 |
2017/10/22(日) 18:29:59.97ID:m20yJ7cw0
>>901 で使った「リソースファイル」って言葉は曖昧だったね。
「設定ファイル」の方が通りがよかったかも。

皆さん文脈から分かってくれると思うけど、
VisualStudio なんかで別の意味で使う言葉だし。
0908デフォルトの名無しさん (ワッチョイ a108-1OZr)
垢版 |
2017/10/22(日) 21:19:51.70ID:bXoG3HvV0
メインフレームでDIAGNOSEを使うときなんか
WCSのアドレスを指定とかね
0909デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)
垢版 |
2017/10/23(月) 01:07:16.21ID:mBA7Qm4F0
スタック変数いらねえな
グローバル変数で性能追求しようぜ
0911デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)
垢版 |
2017/10/23(月) 01:37:37.69ID:mBA7Qm4F0
オペランドを8bitに限定してコード効率上げるってのがゼロページの発想でしょ
メモリ素子が高価な時代の涙ぐましい仕組みのひとつ
0913デフォルトの名無しさん (ワッチョイ a593-+4Iz)
垢版 |
2017/10/23(月) 05:14:49.57ID:u4PJ0rqa0
>>911 アドレス値のフェッチが1byteだけで済むから
16bit(2byte)の絶対アドレスより速い、てメリットもあるしね。

>>912 これはアリかも。
CPUにデカいキャッシュが載る時代のゼロページ的な使い方だな。
0914デフォルトの名無しさん (ワッチョイ ddb3-0GSP)
垢版 |
2017/10/23(月) 05:45:57.83ID:iFI38Dlw0
%%%%1000%%%%

000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end
0917デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 19:25:26.97ID:nagTo3YF0
>>915
そこって、デバッガがCPUレジスタ参照する為の窓だから、プログラムがその領域指すと、デバッグが困難になるから禁止してるんじゃね?
0918デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 19:29:22.87ID:nagTo3YF0
デバッガー専用の作業メモリー領域もプログラムから使用禁止だったりするだろ?
0919デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/23(月) 19:30:14.37ID:HemzWECS0
レクサスRXに見えた
0922デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 20:30:23.77ID:nagTo3YF0
>>921
アクセス禁止じゃねーよw
使用禁止だ。
デバッガー使わないなら好きに使えばいい。
0923デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 20:37:44.96ID:nagTo3YF0
あ、レス間違えたわw
0930デフォルトの名無しさん (ワッチョイ c5eb-cn1a)
垢版 |
2017/10/24(火) 12:07:36.73ID:SPAXueit0
int func(int) は、引数が int 型で、int 型の値を返す関数
int func(void) は、引数が無しで、int 型の値を返す関数

というのは分かったのですが

int func() のように () の中が空の場合は、どうゆう意味になりますか?
int func(void) と同じ?
0934デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)
垢版 |
2017/10/24(火) 13:44:26.08ID:/a/Ldfbw0
DMAでも使うならともかく
レジスタをメモリ空間にマッピングする利点なんてないだろ
0936デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)
垢版 |
2017/10/24(火) 14:14:56.50ID:gWGoT/ywp
>>934
むしろデメリットさえあるな。だからデバッガが使う以外は利用されてないだろ?
0937デフォルトの名無しさん (ワッチョイ cee7-h3yZ)
垢版 |
2017/10/24(火) 14:24:36.56ID:fybDUnFS0
ふふ、トヨ〇の要求。今は知らん。
0938デフォルトの名無しさん (ガックシ 06ee-G561)
垢版 |
2017/10/24(火) 16:20:50.45ID:b8RDVE7X6
まだやってたのかよレジスタ
0939デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)
垢版 |
2017/10/24(火) 18:07:58.27ID:gWGoT/ywp
内部レジスタと外部レジスタは意味がまるっきり違うんだがなぁ
0941デフォルトの名無しさん (ワッチョイ 559f-0GSP)
垢版 |
2017/10/25(水) 01:31:11.21ID:a9TiLHl10
>>930
同じなんだけどコンパイル時の引数チェックをしなくなる。
int func(void) の関数に対して func(123) みたいにして呼ぶとコンパイルエラーだが
int func() の関数に対して func(123) で呼び出す記述があってもエラーにならない。

なんでこうなっているのかというと、昔のCにはvoidがなくて引数なしの関数は
int func() のように書くしか方法がなく、尚且つ昔のC言語は引数のチェックを
していなかったため。つまり過去のC言語ソースをコンパイルできるようにする
ためにこのような記述が残されている。今となっては余程の事がない限りこんな
書き方はしない方が良い。バグの元だ。
0942デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 15:47:29.67ID:Ls3qnFv30
ヤフー知恵袋って色んな奴がC言語勉強してるやつがいるな、素人みたいな質問やら専門的な質問や大学の問題の質問やらのプログラミング質問が
0943デフォルトの名無しさん (ワッチョイ 51c9-aYWJ)
垢版 |
2017/10/25(水) 17:13:54.92ID:3egWGIK90
>>941

へーへー
0946デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 18:20:37.33ID:Ls3qnFv30
>>944
まず何のプログラミングか言わなきゃダメでしょうみんなプロだから挙動で読めちゃう人いるけどさ
0947デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/25(水) 18:28:36.51ID:Ho4Id2OA0
>>944
printfでNULL->valueをしてるから
0952デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/25(水) 19:16:50.46ID:Ho4Id2OA0
そういうことか
全然分からんかった
引数に受け渡されたポインタ変数のコピーに新しく確保したメモリのアドレス入れても呼び出し元のポインタ変数はなんも変化しないのか
0954デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 20:39:40.86ID:Ls3qnFv30
俺の頭じゃあ理解できなかったわアロー関数は苦手だ、ここには天才がやっぱいるわ
0956デフォルトの名無しさん (ワッチョイ 7ad2-eNpY)
垢版 |
2017/10/25(水) 23:31:22.55ID:A9sEwxck0
追い詰められてる時って、ちょっとしたことを見落としたりしがちだし。
そういうときにちょっとしたつまらない問題点を指摘してくれる人が神様に思えることはある。
本当に何でこれに気づかない?って問題に延々と気づかないことあるから。
0957デフォルトの名無しさん (ワッチョイ 7181-/MqV)
垢版 |
2017/10/26(木) 01:05:20.57ID:WmOJzpQL0
実務の世界だと、開発リーダーにとっては、この程度はさらさらと書いて欲しいと思うだろうな
この辺の考え方が理解できてないと、構造体を使ったリスト構造、木構造が作れないと思う
0958デフォルトの名無しさん (ワッチョイ 7102-rVGZ)
垢版 |
2017/10/26(木) 01:22:11.08ID:FPgm8C1h0
急に語り出したぞ、おい
0959デフォルトの名無しさん (ワッチョイ 719f-a4mA)
垢版 |
2017/10/26(木) 03:22:11.49ID:kwyo2eDl0
リスト構造、木構造という言葉がわからなかったのかな?
0961デフォルトの名無しさん (ワッチョイ 9193-cGPg)
垢版 |
2017/10/26(木) 06:24:41.35ID:8UQnYlEC0
>>944 からの流れだとすると、実務で使う人とは感じなかったな。
専門外の学生さんが単位を取るために四苦ハック、
進級できたら思い出しもしない、という立場からの質問だろうと。
0962デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/26(木) 10:26:24.17ID:Z8IKw2VS6
リスト構造木構造とか理系大学の情報系科目で誰でもやるがな
こんなところ見てる奴が知らんわけないだらアホ
0963デフォルトの名無しさん (ササクッテロラ Sp9d-aRZk)
垢版 |
2017/10/26(木) 10:46:18.77ID:DmfMCHFwp
リストもツリーも基本の構造は一緒だろ。
ただ、鎖ね繋がってる数が違うから、
扱いが違うだけでな。
0966デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/26(木) 12:51:34.13ID:jbwuNtau6
>>965
リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
0969デフォルトの名無しさん (ワッチョイ 1be7-J/p5)
垢版 |
2017/10/26(木) 18:29:14.01ID:l+WAoJAx0
自分の知ってる関数解ってる宣言の仕方ならわかるけどさ解らない奴使ってたらもう変数が動いてるかわからんだろう
そうなったらもう謎でコードなんか読めないだろ?
0972デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/26(木) 20:03:01.42ID:DmfMCHFwp
それより、そのアドレスはアクセス権のある場所を指してるんだよな?
0974デフォルトの名無しさん (ワッチョイ d175-rVGZ)
垢版 |
2017/10/26(木) 21:42:34.03ID:Fjma9sq90
とりまリスト構造なんて誰でもしってること
>>959のレスはイミフ
0976デフォルトの名無しさん (ワッチョイ 9193-cGPg)
垢版 |
2017/10/27(金) 06:49:46.56ID:VPed4ksO0
「関数の引数に値渡ししかないから、
ポインタを渡すことで呼出側の変数の内容を関数側で変更する」
というのが他の言語と比較した場合、C特有のトリックと呼べるかも。

もちろん、Cの村では当然かつ基本のことだけど。
レス数が950を超えています。1000を超えると書き込みができなくなります。