C言語なら俺に聞け 154

■ このスレッドは過去ログ倉庫に格納されています
2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
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/

※前スレ
C言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/05/03(日) 15:38:01.56ID:9RS4MG9F0
どうしても気になるんなら union にしときゃいい

union args {
struct { int a,b,c, … } forA;
struct { double A,B,C, … } forB;
 …
struct { int a,b,c, … } forZ;
};

void func1(union args *args) { args->forA.a += 1; }
void func2(union args *args) { args->forB.A += 1; }
2020/05/03(日) 15:44:14.80ID:TPvygFvF0
>>772
やっぱり測定するしかないですかね

>>773
なるほど
共用体使えば節約できますね

とりあえず気にしない方向でいきますm(_ _)m
2020/05/03(日) 20:50:14.66ID:YCnT8Ic+0
>>771
値のレジスタ渡しをしなくなるから、遅くなると言えば遅くなる。
2020/05/03(日) 21:01:09.61ID:VoACNqTya
>>771 の↓の書き方はいつからできるようになったのですか?

>func1(&(struct args){ .a = 1 });

こういうのはC++に任せといてもらいたいなぁ…
2020/05/03(日) 21:10:45.99ID:VoACNqTya
スレ汚しですみません、>>776 です
ググりなおしたら分かりました
C99 からなんですね
778デフォルトの名無しさん (ブーイモ MMcf-oXVp)
垢版 |
2020/05/03(日) 22:27:02.54ID:oqZmrKinM
逆にC++では出来なかったりするのだ
2020/05/04(月) 03:08:12.32ID:fONA7GYV0
Win32APIを学びたいと思ってて
その前にCかC++を学ばなきゃいけないみたいなのですが
どっちを選んでも同じようにWIN32APIが使えるのでしょうか?
プログラミング経験自体ほぼないです

http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
2020/05/04(月) 03:57:58.15ID:aRLx0l420
>>779
うん、どっちでも同じように使える
Win32APIのインターフェースはCで、C++はかなり上位互換なので
だからC++じゃないCでやる意味はあまりないよ

そこだいぶ古いなぁと思ったら、新しいところに移行してるじゃん
http://www.wisdomsoft.jp/
でもやっぱり古いね

猫でもの方がまだちょっと新しい分マシかも
http://www.kumei.ne.jp/c_lang/
2020/05/04(月) 04:23:31.56ID:fONA7GYV0
>>780
わかりました。難しいことは全く分かりませんが
同じように使えるとお聞きし、安心しました!
教えていただきありがとうございます。
2020/05/04(月) 06:41:41.63ID:89CdWSZ70
>>775
一時オブジェクトではなくて引数の構造体を使いまわした場合は構造体のほうが早いのでしょうか?

struct args args = { .a=0, .b=1, .c=2 };
func1(&args);
func2(&args);

func1(0, 1, 2);
func2(3, 4, 5);
2020/05/04(月) 06:44:52.23ID:nMCshN110
興味があるなら
コンパイルの結果と測定結果を自分で見ると良い
2020/05/04(月) 07:11:51.47ID:89CdWSZ70
はい
アセンブラ勉強しないといけないみたいですね
2020/05/04(月) 07:25:22.71ID:89CdWSZ70
>>782
すみません、これは自分で計測してみることにします
どうもありがとうございましたm(_ _)m
786デフォルトの名無しさん (アウアウエー Sa9f-ur4w)
垢版 |
2020/05/04(月) 10:51:06.23ID:mShckTAJa
>>779
Win32API を使いたいだけなら
むしろ C++ 知らない方が良い
C からやれ
https://mevius.5ch.net/test/read.cgi/tech/1588339011/
2020/05/04(月) 11:06:11.52ID:XxHrn+6R0
win32apiを学びたいのは何でなんだろう
2020/05/04(月) 11:09:31.13ID:/zUHO7E00
余計なことを言ってやる気なくさせるな
とっかかりは何だっていいんだよ
789デフォルトの名無しさん (アウアウエー Sa9f-ur4w)
垢版 |
2020/05/04(月) 11:12:33.82ID:mShckTAJa
C も C++ も経験ないからどっちが良いかって聴かれて
C が良いって言っただけなのに

なんでお前がやる気を無くす必要があるんだ?
2020/05/04(月) 12:14:31.76ID:/zUHO7E00
>>789
そのとおりだよ
あんたのことじゃない
2020/05/04(月) 12:40:32.82ID:GWxjhlJ10
>>789
> C も C++ も経験ないからどっちが良いかって聴かれて

そういう質問ではない。

>>779
>>789 は Win32API のコード例が何で書かれてあるかといったことをまるきり勘案していないようなので、無視していい。
2020/05/04(月) 12:54:09.43ID:/zUHO7E00
M$のチュートリアルはわかってる人をも混乱させるクオリティだからなあ
「猫でもわかる」はCだね
http://www.kumei.ne.jp/c_lang/index_sdk.html
2020/05/04(月) 12:54:38.34ID:GsKQPEDp0
C言語用に書かれたコード例って見つけるのが大変かも
2020/05/04(月) 13:08:36.01ID:oicr5OD+M
いまさらCを勧める理由がわからん
2020/05/04(月) 13:12:22.44ID:8bo0chxSM
>>792
> 「猫でもわかる」はCだね
C++のクラスとかを使ってないだけ
そもそもサンプルコードのファイル名はsample01.cppとかだからC++としてビルドしてるし
796デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/04(月) 16:02:52.28ID:VPxf0TWkH
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0

UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0

連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0

4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0

matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0

ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0

SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
2020/05/04(月) 16:41:52.22ID:7/M++IMa0
>>782
一時オブジェクトかどうかじゃなく、関数の引数の型によって内部的な関数の呼び出し方(というか引数の渡し方)が変わる。
int の値のなんかだとスタックに詰まずレジスタで渡す高速な呼び出し方になったりするが、
構造体ポインタ渡しだとポインタそのももはレジスタで渡されても実際の値はポインタ経由のメモリアクセスにならざるを得ないから、理屈の上では遅くなる。
2020/05/04(月) 18:17:25.07ID:89CdWSZ70
>>797
計測してみたら仰るとおりでした
一番早いのが普通の引数で、ポインタ渡ししてメンバに代入とかすると遅くなりました
ポインタアクセスって遅いんですね
2020/05/04(月) 18:27:04.51ID:Fiop0J3e0
>>798
その計測、最適化有効にして比べてる?
最適化すればそんな大きな差が出る話だと思ってなかったんで、気になる。
2020/05/04(月) 18:35:18.11ID:89CdWSZ70
>>799
-O3だとみんな同じと言うか0秒になって差がわかりませんw
2020/05/04(月) 19:20:21.44ID:xCaPkE7P0
>>800
それが正解。最適化されたら検知できないほどの差しかないから通常は気にする必要ないよ。
2020/05/04(月) 19:26:17.85ID:nMCshN110
差が大きいか小さいかなんて中身によるだろ

ほとんど何もしない関数で
関数として実装されて
ループの中にあれば
差が大きいこともある

構造体の方が速い事もあるし
直接の方が速い事もある

とりあえずはきれいなコードで作っておいて
パフォーマンスが問題だとわかった時点で対策すれば良い
おそらく今回の部分は99.99%気にしなくて良い
2020/05/04(月) 19:30:22.69ID:nMCshN110
非常に短時間の測定は
x86ならTSCレジスタで測るのが良い
非常に軽く非常に分解能が高い

QPCもTSCから計算して求めている
2020/05/04(月) 19:34:24.84ID:nMCshN110
同じコードでも周りのコードによって時間が大幅に変わる事があるので注意

例えば関数がインライン展開されてたものが
全然関係ない所からのコールが追加されただけで
関数コールに変わったりする

また、
結果を使わないただの時間測定コードだと
関数コール自体消される事も良くある
2020/05/04(月) 21:14:13.28ID:7/M++IMa0
最適化しててもアセンブラソース吐かせて比べてみると勉強になると思う。
いやむしろ最適化してる時こそアセンブラソース吐かせて確認するのがいいかも。
勝手にインラインになってたり処理が省略されたりするしね。
2020/05/04(月) 21:45:58.62ID:GSMTfSohd
最適化なしでリリースすることはあり得ないのだから
当然測定もチューニングも最適化オプション込みででやるべきだし
O0オプションで吐いたアセンブラなんて見ても無意味
2020/05/04(月) 22:01:22.81ID:nMCshN110
一般的な話をすると
最適化無しでリリースする事はあるけど

パフォーマンスが重要であれば無いだろうねえ
2020/05/04(月) 22:11:38.30ID:7/M++IMa0
あぁ、呼出規約についての勉強のつもりだったから最適化無しを想定したけど、
ベンチマークみたいなコード書いてるんだろうからそもそも処理が残ってるかの確認とかの意味で最適化時のを見た方がいいと書いた。
2020/05/04(月) 22:11:58.28ID:7/M++IMa0
あぁ、呼出規約についての勉強のつもりだったから最適化無しを想定したけど、
ベンチマークみたいなコード書いてるんだろうからそもそも処理が残ってるかの確認とかの意味で最適化時のを見た方がいいと書いた。
2020/05/04(月) 22:15:22.94ID:7/M++IMa0
ダブりすまん
2020/05/04(月) 22:17:04.56ID:nMCshN110
>>810
昔両親にそう言って謝ったことがある
2020/05/04(月) 22:19:56.77ID:GsKQPEDp0
「書込失敗」ってでたときは、念のためリロードしてみた方がいい
2020/05/04(月) 22:45:06.74ID:OG81C0sgd
自分の業界じゃ最適化無しリリースなんて当たり前にしてるよ
多くは有りリリースだろうけど、無しがあり得ないなんてことは無い
2020/05/04(月) 22:55:41.14ID:nUxpSn1T0
初心者です。
ポインタの理解を深めるために、visual studioのデバッグで、変数の値をウォッチしています。

例えば、
FILE *src;
  fopen(〜10byteのファイルを開く〜)
fseek(fp, 0L, SEEK_END);
printf("%s は %ld byteです.\n",filename, ftell(fp));

こんな感じの命令をやった時に、*fpとかfpとか&fpの変数を観察してみたのですが、
値がピクリとも変化していないのに、ftell(fp)を使うとちゃんと10byteと表示されるのです。
fsekkの時点でfpは変化していると思いますが、どのようにウォッチすれば良いのでしょうか?
ftellはfpのなんの変数を見ているんでしょう…。。
815814 (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/04(月) 23:00:16.50ID:nUxpSn1T0
>>814
× FILE *src;
○ FILE *fp;
だめですね。ごめんなさい。
2020/05/04(月) 23:15:21.86ID:7QD1dgDVH
>>814
FILE *fp はポインタですから、fp の指す位置は変化しません
fseek() で変化するのは、fp が指した先の領域(struct FILE 構造体)の中にあるパラメーターであって、fp 自体は変化せず同じ位置を指したままでいます。
2020/05/04(月) 23:19:51.78ID:FJ9kDVSL0
ポインタで詰まっている初学者ですが、皆様はどうやってポインタ勉強しましたか?
2020/05/04(月) 23:20:08.53ID:Fiop0J3e0
>>814
FILE構造体が直接情報を持っているとは限らず、さらにポインタを多段に経由したり
OS管理のファイルハンドル・ファイルディスクリプタなどの先に情報がある可能性もある。

そもそも構造体メンバが規定されていないのでウォッチで何も見えなくても不思議は無いよ。
2020/05/04(月) 23:22:46.58ID:GsKQPEDp0
インクルードファイルあさって、FILE構造体の中身を見てみると面白いよ
2020/05/04(月) 23:26:28.97ID:nUxpSn1T0
>>816
ありがとうございます。fp自体は変化してなかったのですね。
FILE構造体の中に現在値を示す変数があるのだと思い、fp.posみたいなことを試してみたのですが、
よくわかりませんでした。(_Placeholderとかいうのしかなさそうでした。)

struct FILE構造体の中身の値の変化を、ウォッチ機能で観察することは可能なんでしょうか?
2020/05/04(月) 23:35:10.05ID:7QD1dgDVH
>>818
OS 側ファイルディスクリプタが FILE に記されることはあっても、
シーク位置を OS とで共有するのは難しいのではないでしょうか?
2020/05/04(月) 23:35:26.33ID:nUxpSn1T0
>>818
ありがとうございます。
もっと上位(OSレベル)でやり取りされてる情報であるから、下位(自作プログラムレベル)からでは観察できないってことですか…

>>819
ありがとうございます。
FILE構造体の中に、_ptr(現在値)や_base(先頭アドレス)があると聞きました。
なので、fp._ptrとかを試しましたが、何も見れませんでしたね。

自分で定義した構造体の中の変数は観察することができるのに、なんでFILE構造体の変数は観察できないんだって、
不思議に思ってました…。
2020/05/04(月) 23:50:07.56ID:29dvD9qia
>>817
俺は以下のようなことを繰り返して段階的に複雑なケースを理解していったよ。
まずは入門書で基本的な概念を理解する。
実際にコードを書いて、様々な型の変数、配列、構造体やその要素に対して&演算子を適用してアドレス値を取り出して、対応する型のポインタに入れる。
ポインタが格納している値、ポインタが指している先に格納されている値をprintfで表示して確認する。
ポインタをインクリメント、デクリメントしたりしてポインタ自体の値の変化やポインタが指す先の値が何なのかを確認する。
一段階のポインタが理解できてきたらポインタのポインタなど多段階の間接参照を試してみる。ここでもまたポインタの演算を様々に試す。
値が予想とは異なるものだったり、型が違うとコンパイラに指摘されたりしたら、やはり絵を描いてどこがどう違っていたかを考えてみる。
何かを理解したら、更にここをこうしたらどうなるのかという疑問が色々沸いてくるのでそれらも逐一コードを書いて試していく。
慣れてくれば多次元だったりconstや関数ポインタなども含めて複雑にネストした宣言もシンプルなルールが再帰的に組み合わせただけのものというのが腑に落ちて理解できてくると思う。
2020/05/04(月) 23:51:26.90ID:GsKQPEDp0
FILE構造体でアクセスした場合は、直接ファイルを操作するというよりも
バッファリングしたデータへのアクセスと考えた方が良いかも知れません

実際のファイルはファイルディスクリプタというOSの仕組みの中で操作してます
2020/05/05(火) 00:00:06.80ID:3UIwTLmD0
>>821
lseek() で実装できるんじゃないの?何かダメな理由知ってるんなら教えて。
2020/05/05(火) 00:00:45.59ID:J1ERvQ2q0
>>822
FILE構造体の内容は仕様で規定されていないから、使用するライブラリ等の実装で決められていてユーザ側が知ることはできないし知る必要もない物だよ。_ptrとかがあるという話も、とある実装ではそうなっているということ。
そもそものポインタの理解を深めるという目的なら、FILE構造体の中身はこれ以上深入りする必要はないね。
FILE構造体は初心者が真っ先に触れるものの一つだけどちょっと特殊な存在だね。
2020/05/05(火) 00:06:58.87ID:NEWGqmtJ0
FILE構造体の中身は標準ライブラリの実装によって違うんだから深追いしても無駄なだけ
FILE *fp;はそもそもfopenで帰ってきたものを他のファイル操作関数に渡すだけの使い方しかしないんだからポインタを理解する教材に向いてない
2020/05/05(火) 00:09:41.71ID:jNOFZ4L/H
>>825
lseek() の返り値を保存するんですね、返り値には気がつきませんでした
2020/05/05(火) 05:40:45.15ID:ifa9JNiv0
構造体 FILE は普通はポインタの形でしか使わないから
ユーザーが見るヘッダではopaqueかも知れないしね正ちゃん。

>>817
「ポインタ変数には“変数のアドレス”が記録される」っていう
素朴な理解でしばらく進められないかな。
&a は「変数aのアドレスを得る」
*p は「ポインタ変数pが指しているアドレスから内容を取り出す」
830デフォルトの名無しさん (ワッチョイ bf8c-Sf3c)
垢版 |
2020/05/05(火) 06:30:19.59ID:nQMNje/J0
初心者は最初にシェルスクリプトでプログラムを固めた方がいいよ。
2020/05/05(火) 07:21:12.68ID:H58nk9am0
823
829
830
みなさま、アドバイスどうもありがとうございます。
一個一個理解してスキルを身につけていきたいと思います。
832デフォルトの名無しさん (ワッチョイ c7e3-4AVG)
垢版 |
2020/05/05(火) 07:45:39.83ID:q3hMRGAJ0
コメント失礼します
年収200万、一年ごとに5%上がりさらに10万円あがる20年後の給料は?と言う問題と、2時間格闘したのですが全くわかりません。
whileを使って何度やってもエラーが出ます
2020/05/05(火) 07:51:08.70ID:77z9bUn/d
>>832
エラーの出るソースコードを見せてくれないと何もできないよ
2020/05/05(火) 07:54:39.70ID:rB6guZqB0
中学の数学の問題みたい
835デフォルトの名無しさん (ワッチョイ c7e3-NlPP)
垢版 |
2020/05/05(火) 08:38:22.00ID:q3hMRGAJ0
>>832
(repl):3: syntax error, unexpected '=', expecting end-of-input
x*1.05=+100000
こんなのが出ます
2020/05/05(火) 08:42:10.15ID:93R0w8QG0
普通にforでいいだろ、なんでwhile
whileでfor書けるけどさ
2020/05/05(火) 08:44:21.30ID:77z9bUn/d
>>835
x = x * 1.05 + 100000
って書くか
x *= 1.05
x += 100000
って2行で書くか

1行ではできない
2020/05/05(火) 08:45:28.28ID:rB6guZqB0
1行ではできない
の意味がわからん
2020/05/05(火) 08:50:35.47ID:93R0w8QG0
>>835
「=」という演算子は代入という動作をするものだ
変数aに(式)の値を代入したい場合
a = (式);
と書く
2020/05/05(火) 08:56:34.04ID:rB6guZqB0
どう考えてもネタと思うのだが
>>835の記述、考えられなくないか?

方程式にもなってないし
代入にしても意味的に>>832になってない
2020/05/05(火) 09:21:45.17ID:yvmW06JI0
亀だがみんなFILE構造体FILE構造体と呼んでるが
FILE型は構造体かどうかすら規定されてなかった記憶
2020/05/05(火) 09:30:09.69ID:3UIwTLmD0
>>841 そうだね。規格見てきた。
> ... an object type capable of recording all the information needed to control a stream, including ...
2020/05/05(火) 09:53:01.97ID:77z9bUn/d
https://ideone.com/SwC3g6
スマホで書いたから見づらいのは許して
2020/05/05(火) 12:43:31.47ID:IcOCoxT/0
自宅待機中の課題なんだろうけど、先が思いやられるな
845デフォルトの名無しさん (ワッチョイ c7e3-NlPP)
垢版 |
2020/05/05(火) 13:25:50.40ID:q3hMRGAJ0
>>843
わざわざ丁寧にありがとうございます!
846デフォルトの名無しさん (ワッチョイ dfa5-fzHW)
垢版 |
2020/05/05(火) 13:36:18.22ID:JDagEH9a0
FILEは紙テープ時代の仕様を引き摺ってるからね
しょうがないね
2020/05/05(火) 14:21:07.04ID:ZggaRwfV0
>>832
万円単位で
double answer = 200.0 * pow(1.05, 19) + 10.0;
2020/05/05(火) 14:38:54.54ID:Bvt0+Nbg0
>>847
その計算式だと毎年の10万が復利の枠外になってしまうのでは?
2020/05/05(火) 14:41:31.81ID:Bvt0+Nbg0
とうか10万が1年分しか反映されないな
2020/05/05(火) 14:54:18.83ID:ZggaRwfV0
>>848
あぁ、20年後に10万追加されるってことじゃないのか
2020/05/05(火) 15:04:19.69ID:77z9bUn/d
20年目ではなく20年後なのでpowするなら20じゃないと
2020/05/05(火) 15:11:01.35ID:oj0p8Curd
おまいら中学生でも出来るぞ
2020/05/05(火) 18:12:23.92ID:ekADkGWO0
なぜ、fopenは"fp"でポインタ受け取り、fopen_sは"&fp"でポインタを受け取るのか分かりません。
定義?を見て、見極める方法はありますか?

fopen_sの定義に、引数として"FILE** pFile"を指定されているとこに、"&fp"が入るのは何故ですか?
他の命令でも*fp、fp、&fpのどれを入れるのか判断がつきません…。

<プログラム例>
FILE *fp
fp=fopen("aiueo.txt","rb");
fopen_s(&fp,"aiueo.txt","rb") …★

<fopenの定義>
errno_t fopen_s(
 FILE** pFile,
 const char *filename,
 *mode
);

語彙力が乏しいのでわかりにくくて大変申し訳ございません。
2020/05/05(火) 18:16:13.22ID:NHsraqIFd
fpの型はFILE*だよね。それに&をつけるとFILE**型になる。
2020/05/05(火) 18:20:26.43ID:NHsraqIFd
FILE**型の仮引数はFILE*型を受け取れる。FILE*の扱いは従来の入出力関数と同じ。
2020/05/05(火) 18:35:00.87ID:GarexHwt0
errorno 使わずに戻り値で異常を伝えるために & で受けてるのか
2020/05/05(火) 18:42:13.15ID:ekADkGWO0
>>854-855
ありがとうございます。
以下の理解でよろしいのでしょうか?

(1)変数FILE* fpの場合
・"*fp"(FILE型?)
・"fp"(FILE*型)
・"&fp"(FILE**型)

(2)変数FILE**fpの場合
・"**fp"(FILE型?)
・"*fp"(FILE*型)
・"fp"(FILE**型)
・"&fp"(FILE***型)

変数に付ける"*"の数を増やすと、逆に型の"*"が減るのはなんか気持ち悪いんですね…
2020/05/05(火) 18:48:36.63ID:NHsraqIFd
>>857
その通り。
2020/05/05(火) 20:26:30.94ID:ekADkGWO0
>>858
ありがとうございます。

型側と変数側で"*"を奪い合ってるイメージをすると覚えやすいかなと感じました。
int型:値そのものを入れるイメージ
int*型:値が格納されているアドレスを入れるイメージ(ポインタ)

int * p;
*p = 1; (1つしかない"*"を変数側に付けてしまったので、int型となり"*p"には値が入る。)
p=&hensu; (変数側に"*"を付けてないので、int*型となり、"p"にはアドレス番号が入る)
2020/05/05(火) 20:48:34.53ID:J1ERvQ2q0
>>859
覚え方は色々あると思うけど、俺は以下の方法がオススメ。

int i; → iがint型の値になる。iはint型の変数。
int *p; → *pがint型の値になる。
つまりpは*を付けてint型の値になる、すなわちp自信はint型を指すポインタ (=pはint*型の変数。)
2020/05/05(火) 21:32:51.06ID:FuU+hT+R0
俺の覚え方はこうだな

&:メモリの位置(アドレス)を取り出す操作
*:メモリの位置に記録されている値を取り出す操作
型:値が格納されているメモリの幅を示す
  ※例えばint型は4バイトなのであるint型のポインターが0x0000を指していたら
   メモリの0x0000〜0x0031に格納されている値が対象となるデータ
   int型ポインターでなくchar型ポインターだとしたら
   メモリの0x0000〜0x0001に格納されている値が対象となるデータ
2020/05/05(火) 21:36:39.09ID:FuU+hT+R0
>>861
誤記った
誤)0x0000〜0x0031
正)0x0000〜0x0003
2020/05/05(火) 21:43:41.89ID:FuU+hT+R0
>>861
*については2つ意味があるとして覚えているわ(この認識が合ってるのかは分からん)

変数宣言時の*の意味:宣言した変数がポインターであることを示す
それ以外の*:メモリの位置に記録されている値を取り出す操作

ポインター:メモリの位置を保存するための変数
ダブルポインター:(ポインターの)メモリの位置を保存するための変数
トリプルポインター:(ダブルポインターの)メモリの位置を保存するための変数
・・・・以下略
2020/05/05(火) 21:43:43.86ID:fevQ7qkha
fopen_s では、*fp を引数として参照渡ししてるからだよね、関数側で書き換えてもらうために
int i; を &i で参照で渡して、i を書き換えてもらうように、ポインタを渡して fopen_s で内容を書き換えてもらっている
2020/05/05(火) 22:05:47.08ID:ZggaRwfV0
ポインタの覚え方もさることながら、型の修飾もどうだったかすぐ忘れるw
値を指し示す const ポインタなのか、const な値を指し示すポインタなのか、その両方なのか、それらの書き分けするのに毎回 google に聞いてる。
多重ポインタとか関数ポインタとか volatile なんかも組み合わされてくると、書けはしてももはや読める自信が無いw
2020/05/05(火) 22:36:47.41ID:w8UzBWRO0
>>795
クラスを使ってないだけか?
テンプレートや無名共同体は使ってるか?
2020/05/05(火) 22:38:28.76ID:w8UzBWRO0
>>832
C関係ないから余所行きな
2020/05/05(火) 22:48:35.43ID:n0fzAd1LM
>>866
クラス「とか」な
普通に考えたらわかるだろ
2020/05/05(火) 23:47:03.47ID:gMlNnRrSd
なぜだか832が自動であぼーん
870デフォルトの名無しさん (ワッチョイ 6aad-48kr)
垢版 |
2020/05/06(水) 00:52:01.23ID:izcxg96Z0
>>822
FILE型についてはわざと中身を隠蔽していると思って良い。

オブジェクト指向の言語ならクラス変数が全てprivateになってるのと同じようなもの。で、そういう変数の読み書きは専用のメソッドを通して行う。
何故そうしているのかというと、外部から勝手に書き換えられたくないからだ。書き換えられると正常な動作を保証できなくなるということでもある。
2020/05/06(水) 07:01:26.49ID:Ye566tnt0
>>868
いーや795で何が言いたいのかさっぱりわからん
揚げ足取りたかっただけか?

拡張子がcppでも内容的にCかどうか
あんたに聞いているんだ
答えてくれ
2020/05/06(水) 07:22:53.41ID:AY471CJRM
>>871
書いてある内容そのままだし別に理解できないならそのままでいいんじゃね?
Visual Studioは(既定の動作として)拡張子でC/C++を切替えるだけって話だし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況