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言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 143
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b375-rVGZ)
2017/10/27(金) 21:28:08.20ID:pAogLeJi0226デフォルトの名無しさん (ワッチョイ 5f71-UELA)
2017/11/10(金) 22:21:46.83ID:WKyXN66O0 >>213
じゃあまあざっくりと集合住宅で例えるか
例えば char hoge; と宣言したとする
するとコンピュータは空いてる部屋を1つ、hogeのために割り当ててくれる
仮に部屋番号を301号室としようか
広さは四畳半のワンルーム
君はこの部屋に、'a' でも 'x' でも好きな文字を入れることができる
次に char piyo; と宣言したとする
そしたらやっぱりコンピュータは部屋を割り当ててくれる
部屋番号はhogeと別にしないと被っちゃうから401としよう
間取りは同じ、四畳半のワンルーム
君がchar型の変数を宣言する限り、広さは常に四畳半だ
更に、int foo; と宣言してみよう。
同じように部屋を割り当ててみるが、困ったことにfooは身体が大きくて四畳半に収まりきらない
これはfooがchar型ではなくint型だからだ
そこでコンピュータは隣の3部屋の壁を取っ払って、計4部屋分の広さにしてfooに割り当てる
最初に与えられた部屋番号を501とすると、fooは501,502,503,504の4部屋を占領することになる
このそれぞれの部屋番号が、いわゆるアドレスだ
つまりまずコンピュータに膨大な数の部屋が用意されてて、変数宣言や関数宣言などをするごとに適宜空いてる部屋を割り当てていく
そのときに割り当てられた部屋の部屋番号が、その変数なり関数なりのアドレスとなる
fooみたく複数のアドレスにまたがってる場合は、その先頭アドレス(今回でいうと501)がfooを指定する際のアドレスになる
変数名からその変数に割り当てられたアドレスを知るには、&を使い&hogeや&fooと書く
じゃあまあざっくりと集合住宅で例えるか
例えば char hoge; と宣言したとする
するとコンピュータは空いてる部屋を1つ、hogeのために割り当ててくれる
仮に部屋番号を301号室としようか
広さは四畳半のワンルーム
君はこの部屋に、'a' でも 'x' でも好きな文字を入れることができる
次に char piyo; と宣言したとする
そしたらやっぱりコンピュータは部屋を割り当ててくれる
部屋番号はhogeと別にしないと被っちゃうから401としよう
間取りは同じ、四畳半のワンルーム
君がchar型の変数を宣言する限り、広さは常に四畳半だ
更に、int foo; と宣言してみよう。
同じように部屋を割り当ててみるが、困ったことにfooは身体が大きくて四畳半に収まりきらない
これはfooがchar型ではなくint型だからだ
そこでコンピュータは隣の3部屋の壁を取っ払って、計4部屋分の広さにしてfooに割り当てる
最初に与えられた部屋番号を501とすると、fooは501,502,503,504の4部屋を占領することになる
このそれぞれの部屋番号が、いわゆるアドレスだ
つまりまずコンピュータに膨大な数の部屋が用意されてて、変数宣言や関数宣言などをするごとに適宜空いてる部屋を割り当てていく
そのときに割り当てられた部屋の部屋番号が、その変数なり関数なりのアドレスとなる
fooみたく複数のアドレスにまたがってる場合は、その先頭アドレス(今回でいうと501)がfooを指定する際のアドレスになる
変数名からその変数に割り当てられたアドレスを知るには、&を使い&hogeや&fooと書く
227デフォルトの名無しさん (アウアウウー Sa23-P3MY)
2017/11/10(金) 23:20:18.63ID:jSzmIFsta >>213
一応考えてみた
アドレス= 住所だと考えて
どこでもドア = ポインタ変数そのもの
行きたい場所 = 参照先のアドレス
として
・自分の部屋にどこでもドアを置く = ポインタ変数を宣言する
この時のポインタ変数のアドレス(ドアの置かれてる場所)は自分の部屋
今はまだドアの向こうはどこにも繋がっていない
・どこでもドアの向こう側をしずかちゃんの風呂場にする = ポインタ変数の中身を参照先(しずかちゃんの風呂場)のアドレスに書換える
これでポインタ変数の中身(=ドアの向こう側)はしずかちゃんの風呂場と繋がる
・ドアを開けて風呂場を見る = *を付けてポインタ変数にアクセスする
・ドア自体がどこに置かれてるかを知る = &を付けてポインタ変数にアクセスする
ポインタの嬉しい点はわざわざしずかちゃん家に行かなくても自分の部屋に居ながら
どこでもドアを介して風呂場を覗く事が出来るので移動の時間が省けて時短になる
一応考えてみた
アドレス= 住所だと考えて
どこでもドア = ポインタ変数そのもの
行きたい場所 = 参照先のアドレス
として
・自分の部屋にどこでもドアを置く = ポインタ変数を宣言する
この時のポインタ変数のアドレス(ドアの置かれてる場所)は自分の部屋
今はまだドアの向こうはどこにも繋がっていない
・どこでもドアの向こう側をしずかちゃんの風呂場にする = ポインタ変数の中身を参照先(しずかちゃんの風呂場)のアドレスに書換える
これでポインタ変数の中身(=ドアの向こう側)はしずかちゃんの風呂場と繋がる
・ドアを開けて風呂場を見る = *を付けてポインタ変数にアクセスする
・ドア自体がどこに置かれてるかを知る = &を付けてポインタ変数にアクセスする
ポインタの嬉しい点はわざわざしずかちゃん家に行かなくても自分の部屋に居ながら
どこでもドアを介して風呂場を覗く事が出来るので移動の時間が省けて時短になる
228デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/11(土) 00:39:20.61ID:4HyMUlDc0 初心者はたとえ話するのが好き。
229デフォルトの名無しさん (ワッチョイ 5f75-OZYs)
2017/11/11(土) 01:09:56.98ID:QwHnz2ZY0 >>227
そんななげーの覚えれねーよ
そんななげーの覚えれねーよ
230デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/11(土) 01:16:01.20ID:4HyMUlDc0 ヘネパタ読破してからプログラミングに進め。
231デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 01:32:47.13ID:cTWJmMx00232デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 01:33:46.86ID:cTWJmMx00233デフォルトの名無しさん (ワッチョイ 5f8c-l80d)
2017/11/11(土) 02:43:48.01ID:OXx9+Toc0 ポインタを説明するときにアドレスで説明するのって、初心者による初心者向けの説明に多いけど
それはアドレスを知ってる人向けで、ここからさらにアドレスを一生懸命別の何かで
例えるのはかえって分かりにくいだけにしか思えない
それはアドレスを知ってる人向けで、ここからさらにアドレスを一生懸命別の何かで
例えるのはかえって分かりにくいだけにしか思えない
234デフォルトの名無しさん (ワッチョイ 7f87-ckd2)
2017/11/11(土) 04:15:47.28ID:qvyXx+2n0 喩えるんじゃなくてメモリそのものを教えたほうがいい
235デフォルトの名無しさん (ワッチョイ 7f87-ckd2)
2017/11/11(土) 04:17:53.56ID:qvyXx+2n0236デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)
2017/11/11(土) 04:30:42.45ID:3tqm8fVd0 >>211
マイコン小僧的な意味での理解が必要かもしれないなあ
ポインタ定義した時点で、コンパイラが「アドレスを入れるためのメモリ領域」なり
「CPUのレジスタ」なりを使うようにしてくれる
貴方が int* a = 300; とか書いたら、 コンパイラは300という数字をどこかに保存しておいてくれる
CPUのレジスタか、特定のメモリ領域かは処理系次第だが
で、計算やるってなったら「CPUの間接参照機能」を利用する
アセンブラ側で「間接参照機能を使え」って感じのコードを吐くのよ
そういうオペコードがある
で、間接参照機能を使った場合、CPUはメモリの内容を2バイトか4バイトか見るでしょ
CPUは「今読んだ数字はメモリの番地である」と判断して
CPU側でいてあるメモリ番地の内容を読み込む
で、読んだデータはコンパイラが吐いたアセンブラのコード次第だが
とにかくCPUには「ある数字をメモリなりレジスタから読み、次にそこに書いてた数字をアドレスと判断し、別のメモリアドレスを読む」って機能がある
それを使うのがポインタ
そんな感じ
マイコン小僧的な意味での理解が必要かもしれないなあ
ポインタ定義した時点で、コンパイラが「アドレスを入れるためのメモリ領域」なり
「CPUのレジスタ」なりを使うようにしてくれる
貴方が int* a = 300; とか書いたら、 コンパイラは300という数字をどこかに保存しておいてくれる
CPUのレジスタか、特定のメモリ領域かは処理系次第だが
で、計算やるってなったら「CPUの間接参照機能」を利用する
アセンブラ側で「間接参照機能を使え」って感じのコードを吐くのよ
そういうオペコードがある
で、間接参照機能を使った場合、CPUはメモリの内容を2バイトか4バイトか見るでしょ
CPUは「今読んだ数字はメモリの番地である」と判断して
CPU側でいてあるメモリ番地の内容を読み込む
で、読んだデータはコンパイラが吐いたアセンブラのコード次第だが
とにかくCPUには「ある数字をメモリなりレジスタから読み、次にそこに書いてた数字をアドレスと判断し、別のメモリアドレスを読む」って機能がある
それを使うのがポインタ
そんな感じ
237デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)
2017/11/11(土) 04:33:00.54ID:3tqm8fVd0 そんな間接参照なんてないです、って処理系もあろうが
Cコンパイラがアセンブラレベルで ご ま か し ま す
ってな話かと
Cコンパイラがアセンブラレベルで ご ま か し ま す
ってな話かと
238デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)
2017/11/11(土) 04:36:10.38ID:3tqm8fVd0 眠い時に書くとろくでもねぇ文章になるわーすまん
とりま「CPUの間接参照」で調べてくれ、そっちのほうが早いかも知らん
とりま「CPUの間接参照」で調べてくれ、そっちのほうが早いかも知らん
239デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)
2017/11/11(土) 04:46:59.68ID:3tqm8fVd0 アドレスについては……
Q: たとえばここに 1 2 3 4 って数字があるとするでそ
二番目を起点にして、二つ指差してみて、起点は指差しの対象に含むよ
A: 指差す箇所を[]でくくると 1 [2] [3] 4 になるかと
そんな感じのテキトーさでいいと思います、これがただ例えば0x000F34824になるだけで
Q: たとえばここに 1 2 3 4 って数字があるとするでそ
二番目を起点にして、二つ指差してみて、起点は指差しの対象に含むよ
A: 指差す箇所を[]でくくると 1 [2] [3] 4 になるかと
そんな感じのテキトーさでいいと思います、これがただ例えば0x000F34824になるだけで
240デフォルトの名無しさん (ワッチョイ 7f87-1iEE)
2017/11/11(土) 04:57:58.31ID:WAa7vu/G0 アドレスはアドレスだろ。何にもたとえちゃいねーよ。まんまだよ。
241デフォルトの名無しさん (ワッチョイ 7f87-1iEE)
2017/11/11(土) 04:58:31.67ID:WAa7vu/G0 アドレス=住所な。
242デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)
2017/11/11(土) 04:58:49.86ID:3tqm8fVd0 なお、ポインタのだいたいの使い道は
・クソでかいデータを複数の関数で参照せなあかんとき(画像処理とか)に先頭アドレスだけ渡してあとよろしこって奴
・呼び出し「先」側でなんかセットアップしてもらわなあかんとき、Win32APIあるある
・関数テーブル(30だか50だか、個別に使う関数の先頭アドレスと、そこに飛ばす条件をペアにした配列があるの)
・無名関数もどきのことをやりたいとき、一部分だけ後付け処理やりたいんでそこだけjmpさせて戻る系の奴というか、sortみたいなの
のどれかやな、こんくらいの説明でいいんだろうか? イミフすぎて正直すまんかった
・クソでかいデータを複数の関数で参照せなあかんとき(画像処理とか)に先頭アドレスだけ渡してあとよろしこって奴
・呼び出し「先」側でなんかセットアップしてもらわなあかんとき、Win32APIあるある
・関数テーブル(30だか50だか、個別に使う関数の先頭アドレスと、そこに飛ばす条件をペアにした配列があるの)
・無名関数もどきのことをやりたいとき、一部分だけ後付け処理やりたいんでそこだけjmpさせて戻る系の奴というか、sortみたいなの
のどれかやな、こんくらいの説明でいいんだろうか? イミフすぎて正直すまんかった
243デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 13:17:40.59ID:cTWJmMx00 コンピュータの内部構造をどの程度知っている人が相手なのかで説明方法を変えた方が良いように思う。
244デフォルトの名無しさん (ササクッテロレ Sp33-1iEE)
2017/11/11(土) 13:21:55.51ID:Qyuy+YBPp TTLロジックICでアキュムレーター組めるくらいなら…
…あ、多分説明自体不要かw
…あ、多分説明自体不要かw
245デフォルトの名無しさん (ワッチョイ df61-sJj3)
2017/11/11(土) 13:41:35.27ID:6HxAQryE0 初心者は一度バイナリーエディタやメモリエディタを弄ってみることを進める・・・と無責任に言ってみる。
246デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 15:25:23.65ID:cTWJmMx00 8bitマイコンみたいなやつだと説明は少し楽になるな。メモリ空間が64KBしかないし。
まあ昔はそれでもバンク切り替えして沢山メモリ使えるようにしていたが、考える上では楽だ。
今はメモリ空間も広大になってメモリブロック切り替えてアドレス変わるのは当たり前だったりして説明が面倒だ。
まあ昔はそれでもバンク切り替えして沢山メモリ使えるようにしていたが、考える上では楽だ。
今はメモリ空間も広大になってメモリブロック切り替えてアドレス変わるのは当たり前だったりして説明が面倒だ。
247デフォルトの名無しさん (ワッチョイ df8a-AcTI)
2017/11/11(土) 15:28:20.12ID:ljWP0iHz0 >>245
debug.exe ですね
debug.exe ですね
248デフォルトの名無しさん (ワッチョイ df61-sJj3)
2017/11/11(土) 17:00:50.95ID:6HxAQryE0 MON
*■
*■
249デフォルトの名無しさん (ワッチョイ 5f81-n7le)
2017/11/11(土) 17:08:09.72ID:HnFKgro40 おじいちゃん・・・
250デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/11(土) 17:25:03.39ID:TdmokUpS0251デフォルトの名無しさん (ワッチョイ ffd5-bKAn)
2017/11/11(土) 18:27:36.19ID:2S6WQY7h0 &h■
252デフォルトの名無しさん (ワンミングク MMdf-AcTI)
2017/11/11(土) 18:34:58.95ID:tdhPifsQM CALL -151
253デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/11(土) 19:57:56.44ID:Hv/PaJUT0 >>252
懐い...
懐い...
254デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/11(土) 23:12:19.01ID:4HyMUlDc0 CASL→C→Java→C++の順でどうぞ。
255デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/12(日) 02:33:10.79ID:0YSprajH0 >>252
な、なぜそれを知っているw
な、なぜそれを知っているw
256デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/12(日) 05:22:01.75ID:yBBP+7vl0 SWEET16
257デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)
2017/11/12(日) 06:32:07.24ID:61B/9ygA0 ポインタの前にアドレスが理解できないってどういうことよ…
アドレス=メモリ上の位置、だよ
例えば64kbのメモリを積んだ機械ならアドレスの全範囲は0x0000〜0xffffだが
そんなこと気にしなくても使えるようにしたから高級言語なのよ
int a;
int *pa;
としたとき、コンパイラはaとpaそれぞれを上記範囲の"どこか"に割り当てる
その"どこか"をaやpaという名前で呼ぶことにするよ、という宣言だから
ただし「変数は"どこか"のアドレスの別名である」ということを"利用"することはできる
pa = &a;
とすれば、paには「aの実際の場所(=アドレス)」が入り
*pa = 123;
とすれば、paが現在指しているアドレス、即ち「aの実際の場所」に123が入る
アドレス=メモリ上の位置、だよ
例えば64kbのメモリを積んだ機械ならアドレスの全範囲は0x0000〜0xffffだが
そんなこと気にしなくても使えるようにしたから高級言語なのよ
int a;
int *pa;
としたとき、コンパイラはaとpaそれぞれを上記範囲の"どこか"に割り当てる
その"どこか"をaやpaという名前で呼ぶことにするよ、という宣言だから
ただし「変数は"どこか"のアドレスの別名である」ということを"利用"することはできる
pa = &a;
とすれば、paには「aの実際の場所(=アドレス)」が入り
*pa = 123;
とすれば、paが現在指しているアドレス、即ち「aの実際の場所」に123が入る
258デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 10:09:12.41ID:H0u2BwIs0 お前らが箱とか部屋とか変なこと言いだすから初学者が混乱するんだろ。
259デフォルトの名無しさん (ワッチョイ 7fa2-Ud84)
2017/11/12(日) 10:18:34.45ID:pV+DiiLQ0 変じゃない説明よろしく
260デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 10:24:13.57ID:H0u2BwIs0 CASLが基本。
261デフォルトの名無しさん (ワッチョイ 5fd2-cd7v)
2017/11/12(日) 10:34:03.82ID:534592TW0 ニモニック表片手にハンドアセンブルしてみろ
そうすりゃアセンブラやコンパイラがなにしてるか
馬鹿でもない限りいろいろ分かる
そうすりゃアセンブラやコンパイラがなにしてるか
馬鹿でもない限りいろいろ分かる
262デフォルトの名無しさん (アウアウカー Sad3-QdKu)
2017/11/12(日) 11:18:13.17ID:JQDoPKa1a 自分は二重ポインタってのが分からないです
アドレスの入るアドレスがあるなら
アドレスの入るアドレスの入るアドレスもあるんですか?
アドレスの入るアドレスがあるなら
アドレスの入るアドレスの入るアドレスもあるんですか?
263デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:23:06.41ID:H0u2BwIs0 アドレスにアドレスは入らないだろ。
264デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:28:32.94ID:H0u2BwIs0 アドレスを記録位置と言い換えてみたらどうだろうか。
265デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:30:59.32ID:H0u2BwIs0 メモリーを記録装置、メモリー上のバイトを記録素子、アドレスを記録位置。
どうだい。
どうだい。
266デフォルトの名無しさん (ワッチョイ 5f9f-ySnM)
2017/11/12(日) 11:32:35.21ID:StX7DGK40 変数の位置(アドレス)を示す変数 = ポインタ
そいつ自体も変数だからアドレスを持ってるしポインタも持てる
そいつ自体も変数だからアドレスを持ってるしポインタも持てる
267デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:33:44.56ID:H0u2BwIs0 記録位置の入った素子の位置が入った記録素子。
これなら有りえるとすぐわかる。
これなら有りえるとすぐわかる。
268デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:35:10.76ID:H0u2BwIs0 >>266
ポインタはアドレスではない。
ポインタはアドレスではない。
269デフォルトの名無しさん (ワッチョイ 5f25-OZYs)
2017/11/12(日) 11:40:26.83ID:V8vWJYoP0 物理的な描像にするな。
論理的な本質部分を説明しろ。
論理的な本質部分を説明しろ。
270デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 11:41:52.30ID:H0u2BwIs0 Cから物理を取り除いたら役に立たない古代文明。
271デフォルトの名無しさん (ワッチョイ 5f25-OZYs)
2017/11/12(日) 11:43:40.40ID:V8vWJYoP0 ハートは抽象的モデル化しろ。
272デフォルトの名無しさん (ワッチョイ 5f25-OZYs)
2017/11/12(日) 11:44:09.30ID:V8vWJYoP0 x ハート o ハード
273デフォルトの名無しさん (ワッチョイ 7f87-ckd2)
2017/11/12(日) 14:48:35.92ID:w0XJ4hAE0274デフォルトの名無しさん (ワッチョイ 7f87-1iEE)
2017/11/12(日) 14:50:03.54ID:BnEu6Dc30 C使う以上、物理的な概念から逃れる事は不可能。
275デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/12(日) 14:54:31.77ID:MOg5phwx0276デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)
2017/11/12(日) 15:11:05.31ID:61B/9ygA0 ○重ポインタという言葉はあまりオススメしない
いくら重ねようが「〜へのポインタ」だ
int a = 123;
int *pa = &a; /* 「int型」へのポインタpa */
int **ppa = &pa; /* 「int型へのポインタ」へのポインタppa */
int ***pppa = &ppa; /* 「int型へのポインタへのポインタ」へのポインタpppa */
参照のイメージ([アドレス][値])
[a][123]
[pa][&a] -> [a][123]
[ppa][&pa] -> [pa][&a] -> [a][123]
[pppa][&ppa] -> [ppa][&pa] -> [pa][&a] -> [a][123]
いくら重ねようが「〜へのポインタ」だ
int a = 123;
int *pa = &a; /* 「int型」へのポインタpa */
int **ppa = &pa; /* 「int型へのポインタ」へのポインタppa */
int ***pppa = &ppa; /* 「int型へのポインタへのポインタ」へのポインタpppa */
参照のイメージ([アドレス][値])
[a][123]
[pa][&a] -> [a][123]
[ppa][&pa] -> [pa][&a] -> [a][123]
[pppa][&ppa] -> [ppa][&pa] -> [pa][&a] -> [a][123]
277デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)
2017/11/12(日) 17:57:06.14ID:dvIcUwwY0 確かにポインタは2重以上はなるべく使いたくないな。混乱するし。
278デフォルトの名無しさん (ワッチョイ ffe7-/rI5)
2017/11/12(日) 18:01:39.60ID:C1sLEmf00 そうだなポインタを文字列の格納だけに使うならアドレスは関係ない
int型で変数を操作するとかなら話は別だけどな
int型で変数を操作するとかなら話は別だけどな
279デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 18:02:47.18ID:H0u2BwIs0 二重以上には二重も入るのだが、本当にそれでいいのか?
280デフォルトの名無しさん (ワッチョイ 5f8c-JIcl)
2017/11/12(日) 18:05:10.12ID:5J9eZD000 二重ポインタって言い方が紛らわしい
「ポインタが二重」って意味が通じない。
もともとは * が2つ付いてることを二重って言ってるんだろうけど
「ポインタが二重」って意味が通じない。
もともとは * が2つ付いてることを二重って言ってるんだろうけど
281デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 18:20:47.35ID:H0u2BwIs0 ポインタは型ではないので、二重のポインタという言い方はあり得るのではないか。
282デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)
2017/11/12(日) 18:22:14.17ID:VcNgV3aF0 ポインタの配列 配列のポインタ ポインタのポインタ
283デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/12(日) 18:25:05.93ID:MOg5phwx0 >>279
「なるべく使いたくない」だからいいんじゃね
「なるべく使いたくない」だからいいんじゃね
284デフォルトの名無しさん (ワッチョイ 5f81-n7le)
2017/11/12(日) 18:25:48.95ID:ppEJgx+i0 三重以上のポインタって実際に使われているの?
285デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/12(日) 18:25:59.93ID:H0u2BwIs0 int型へのポインタに対するchar型へのポインタとかあるのなら紛らわしいという主張も理解できるが。
そんなものは無いので。
***を三重のポインタというのは合理的に見える。
どうだい。
そんなものは無いので。
***を三重のポインタというのは合理的に見える。
どうだい。
286デフォルトの名無しさん (ワッチョイ 5f81-n7le)
2017/11/12(日) 18:28:26.99ID:ppEJgx+i0 int型へのポインタ型へのポインタ
char型へのポインタ型へのポインタ
char型へのポインタ型へのポインタ
287デフォルトの名無しさん (ワッチョイ 5f81-ySnM)
2017/11/12(日) 18:28:46.98ID:5fy9hb990 >>284
15年前大学で4重ポインタの地獄を目にした
15年前大学で4重ポインタの地獄を目にした
288デフォルトの名無しさん (ワッチョイ 5f81-n7le)
2017/11/12(日) 18:30:54.73ID:ppEJgx+i0 >>287
型宣言の読解が試験にでたとか?
型宣言の読解が試験にでたとか?
290デフォルトの名無しさん (ワッチョイ 5f81-ySnM)
2017/11/12(日) 18:36:50.26ID:5fy9hb990291デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)
2017/11/12(日) 18:42:31.96ID:VcNgV3aF0 3次元配列を生成して引数に書き戻すような構造なのか
4次元配列を生成して戻すようなのか
各次元で大きさが固定なら 1次元配列にして 添え字演算で4次元にしちゃうな
4次元配列を生成して戻すようなのか
各次元で大きさが固定なら 1次元配列にして 添え字演算で4次元にしちゃうな
292デフォルトの名無しさん (ワッチョイ 7f87-1iEE)
2017/11/12(日) 19:35:51.01ID:BnEu6Dc30 リスト構造とかツリー構造とか、繋げたり外したりすんのに使うよな?
293デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/12(日) 19:57:25.27ID:MOg5phwx0 >>292
でも2重までじゃね?
でも2重までじゃね?
294デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)
2017/11/12(日) 20:33:06.12ID:0YSprajH0 >>280
階層の方が良いか?
階層の方が良いか?
295デフォルトの名無しさん (アウアウカー Sad3-S13s)
2017/11/12(日) 21:04:53.38ID:RBwKcf3Fa x,y,z座標表すのにint***を使ったことがある
296デフォルトの名無しさん (ワッチョイ 7f0c-zl2n)
2017/11/12(日) 22:25:07.93ID:Q7xN5Euu0 2重以上になりそうなときは構造体にまとめちゃうからなぁ。
297デフォルトの名無しさん (ワッチョイ 5f8c-JIcl)
2017/11/12(日) 22:26:52.43ID:5J9eZD000 >>294
多分、階層の方がわかりやすいだろうね
int ***p; というポインタ変数pで p[x][y][z] とすると、
*(*(*(p + x) + y) + z)
を参照する。このあたりを分かりやすく言えるといいんだけど
多分、階層の方がわかりやすいだろうね
int ***p; というポインタ変数pで p[x][y][z] とすると、
*(*(*(p + x) + y) + z)
を参照する。このあたりを分かりやすく言えるといいんだけど
298デフォルトの名無しさん (ワッチョイ 5fb3-0rpk)
2017/11/13(月) 00:06:28.13ID:NsFkY9mQ0 同一ファイル内の関数を単体で自動化テスト出来る何かスマートな方法はないものか
他のテスト周りで小回りが効く言語と比べると単体テストがお辛い
他のテスト周りで小回りが効く言語と比べると単体テストがお辛い
299片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)
2017/11/13(月) 00:11:14.56ID:GVKu0VVYd >>298
惜しい。C++だったら、コンストラクタでオートメーションできるのに。
惜しい。C++だったら、コンストラクタでオートメーションできるのに。
300デフォルトの名無しさん (ワッチョイ ffe7-bKAn)
2017/11/13(月) 05:48:49.26ID:m7i5EnEm0 テストコードを入れておくしかない。
301デフォルトの名無しさん (ワッチョイ 5f9e-xrXY)
2017/11/13(月) 14:10:14.51ID:oBHzUCYz0 >>295
三次元扱うと***pくらい何て事無いよね
三次元扱うと***pくらい何て事無いよね
302デフォルトの名無しさん (ワッチョイ 5fb3-1iEE)
2017/11/13(月) 14:21:03.70ID:M4Fu1SNu0 構造体のメンバーの構造体のメンバーの構造体のメンバーのつもりで
ポインタのポインタのポインタとかいい気になって使ってたら、
エクセプションの嵐でワラタw
ポインタのポインタのポインタとかいい気になって使ってたら、
エクセプションの嵐でワラタw
303デフォルトの名無しさん (ワッチョイ ffea-AgpC)
2017/11/13(月) 14:23:47.67ID:rCuenLSS0 正しい指し先を格納してるかはコードの書いた奴の責任だからね
言語で保障してくれない
言語で保障してくれない
304デフォルトの名無しさん (スッップ Sd9f-6mXn)
2017/11/13(月) 14:41:15.42ID:xUyRVn+md 有名な言葉思い出した。
プログラムは意図した通りには動かない、
書いた通りに動く。
プログラムは意図した通りには動かない、
書いた通りに動く。
305デフォルトの名無しさん (ワンミングク MMdf-AcTI)
2017/11/13(月) 15:23:54.44ID:U+8SrSdXM ハードがまともに動いている前提でな。
タイマーLSIにall0ぶち込むなんてのはどこのマニュアルにも
書いてないバッドノウハウだろうに
タイマーLSIにall0ぶち込むなんてのはどこのマニュアルにも
書いてないバッドノウハウだろうに
306デフォルトの名無しさん (ワッチョイ df7f-TPjW)
2017/11/13(月) 16:47:57.07ID:bTqh5JwP0 >>298
google testとかcpp testとか使えば?
google testとかcpp testとか使えば?
307デフォルトの名無しさん (ワッチョイ 7f6e-TYjb)
2017/11/14(火) 05:34:12.35ID:Qlty8abH0 三次元配列を扱うのに三重ポインタが出てくると思っている池沼がいるな
308デフォルトの名無しさん (ササクッテロレ Sp33-1iEE)
2017/11/14(火) 09:52:35.71ID:1+/iXMbtp まあ、Cは次元とかオフセット計算が掛け算になるだけだからな。
何次元にしようとリニアな配列のままさ。
何次元にしようとリニアな配列のままさ。
309デフォルトの名無しさん (ササクッテロレ Sp33-1iEE)
2017/11/14(火) 09:54:58.20ID:1+/iXMbtp 俺はポインタを諦めて、構造体配列のインデックスでリンクするリスト構造を作ったわ。
310デフォルトの名無しさん (ワッチョイ ffe7-y/Ph)
2017/11/14(火) 17:36:47.28ID:ijEEO/Co0 誰かが書いてあって気になったんだけど
double a;
scanf("%if", &a);
ってf単体じゃないの?
double a;
scanf("%if", &a);
ってf単体じゃないの?
311デフォルトの名無しさん (ワッチョイ 7fa2-Ud84)
2017/11/14(火) 17:46:40.44ID:CqmbHxm/0 %lfじゃなくて?
312デフォルトの名無しさん (ワッチョイ ffe7-y/Ph)
2017/11/14(火) 18:28:10.04ID:ijEEO/Co0 >>311
間違えたそれだ
間違えたそれだ
313デフォルトの名無しさん (ワッチョイ df8a-AcTI)
2017/11/14(火) 18:42:01.06ID:fdj+YHIz0 long double は別物として実装していない?
314片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)
2017/11/14(火) 18:56:38.89ID:Qnc8WtYFd scanfでは、floatが%fで、doubleが%lfだ。printfでは区別がない。
315デフォルトの名無しさん (ワッチョイ 5f93-csDI)
2017/11/14(火) 19:35:59.33ID:ZWJmr3O/0 cでUTF-8のファイル読み書きとデータの取り扱い方が分からないです
もしかしてできないのかな?
もしかしてできないのかな?
316デフォルトの名無しさん (ワッチョイ 5f76-Ud84)
2017/11/14(火) 19:57:38.61ID:mdecs3M50 調べるとすぐにwikipediaが出てきたよ
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%96%87%E5%AD%97%E3%81%A8%E6%96%87%E5%AD%97%E5%88%97#Unicode.E6.96.87.E5.AD.97.E3.82.BB.E3.83.83.E3.83.88
文字を「L"」で囲むとその文字を表現するワイド文字型の数値となる
Unicode文字セットでは、標準ライブラリの関数を使う前にロケール(地域)を設定する必要があり、また、Unicode用の関数を使う必要もある
// wchar_t型
wchar_t wc = L'a'; // wchar_t型の変数wcに文字L'a'を格納
_wsetlocale(LC_ALL, L""); // ロケール(地域)を設定する
wprintf(L"変数wcに格納された文字は%c", wc); //wcを文字として表示
wprintf(L"変数wcに格納された数値は%4x", wc); //wcを数値として表示
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%96%87%E5%AD%97%E3%81%A8%E6%96%87%E5%AD%97%E5%88%97#Unicode.E6.96.87.E5.AD.97.E3.82.BB.E3.83.83.E3.83.88
文字を「L"」で囲むとその文字を表現するワイド文字型の数値となる
Unicode文字セットでは、標準ライブラリの関数を使う前にロケール(地域)を設定する必要があり、また、Unicode用の関数を使う必要もある
// wchar_t型
wchar_t wc = L'a'; // wchar_t型の変数wcに文字L'a'を格納
_wsetlocale(LC_ALL, L""); // ロケール(地域)を設定する
wprintf(L"変数wcに格納された文字は%c", wc); //wcを文字として表示
wprintf(L"変数wcに格納された数値は%4x", wc); //wcを数値として表示
317デフォルトの名無しさん (ササクッテロレ Sp33-1iEE)
2017/11/14(火) 20:29:12.24ID:1+/iXMbtp だから、文字セットはライブラリの範疇だからC言語スレで聞くなよ。
おまえが使ってるコンパイラのスレにでも行け。
おまえが使ってるコンパイラのスレにでも行け。
318デフォルトの名無しさん (ワッチョイ df7f-TPjW)
2017/11/14(火) 20:29:48.26ID:M89KBFlu0 何したいかによるんじゃね
素でもそれなりには扱えるし、不十分ならライブラリ探してもいい
どうしても無理なら慣れた文字コードに変換すればいいけど、こっちは一部文字情報が欠落するかもね
素でもそれなりには扱えるし、不十分ならライブラリ探してもいい
どうしても無理なら慣れた文字コードに変換すればいいけど、こっちは一部文字情報が欠落するかもね
319デフォルトの名無しさん (ワッチョイ 5f93-csDI)
2017/11/14(火) 20:58:01.97ID:ZWJmr3O/0320デフォルトの名無しさん (ワッチョイ 5f02-TYjb)
2017/11/15(水) 06:11:40.94ID:1fEpam2j0 「配列へのポインタ」で嘘教えてるクソサイト
321デフォルトの名無しさん (ワッチョイ 7f87-ckd2)
2017/11/15(水) 08:01:18.30ID:2LyFVpmC0 エンコーディングにかかわらず、ただのバイト列だからchar*でいい
322ビル・ジョブス (ワッチョイ 5fb3-bJtK)
2017/11/15(水) 09:06:23.81ID:sfEUfVZe0 配列名は変更できない左辺値
323デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)
2017/11/15(水) 10:37:31.14ID:Iv8iuDMF0 次のC規格でそろそろ文字を扱う関数全てunsigned charに変更してくれないかな
utf8でもsjisでもだけど1バイト目の判定でいちいちキャストするのが不毛すぎる
賢明なプログラマならcharなどというプリミティブ型をそのままの名前で使わずちゃんと
typedef char str_t;
とかしてるはずだし、してない愚者はもうシステムもろとも切り捨てていいだろう
-1が欲しいために結局intに拡張されるんだからcharの時点では符号は不要なんだよ
utf8でもsjisでもだけど1バイト目の判定でいちいちキャストするのが不毛すぎる
賢明なプログラマならcharなどというプリミティブ型をそのままの名前で使わずちゃんと
typedef char str_t;
とかしてるはずだし、してない愚者はもうシステムもろとも切り捨てていいだろう
-1が欲しいために結局intに拡張されるんだからcharの時点では符号は不要なんだよ
324デフォルトの名無しさん (ササクッテロラ Sp33-1iEE)
2017/11/15(水) 10:45:30.80ID:5eRwFnaIp C#みたいにbyte型作れば?
それかマルチバイト型
それかマルチバイト型
325デフォルトの名無しさん (ワッチョイ df23-uZPj)
2017/11/15(水) 18:45:36.23ID:/fqUZ3V60 >>323
ハゲドゥ
ハゲドゥ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 津波警報の発表中にグーグル検索、AIが「すべて解除」と誤情報 [蚤の市★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 【無職の男(31)】女子小学生に次々触る 下半身を露出した状態で 公然わいせつ、不同意わいせつ疑い 千葉県警 [nita★]
- 「農林水産業」で賞与が激増!コメや卵など食料品高騰で大儲け [481941988]
- 【実況】博衣こよりのえちえち朝活🧪
- VIPでパズドラ
- 俺の願いが一つ叶うなら「何でもいいから、誰も泣かない世界が欲しい!」なんだけど
- 朝からハイエースでカップラーメン食べてるドカタ
- 冬季賞与報告スレ [577451214]
