Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。838件3やりたいことread()等で読み込んだ入力バッファに対し、ポインタキャストを駆使してメモリ効率の良いコーディングを行いたい。3.7にてコンパイルするとwarningが出力されますが、言語仕様として「正しい」記述を行い、warningを消したく思っております。表現として合っているかも自信がないのですが、表題の通り異なる要素数のポインタ配列キャストがそもそも推薦されていない、ポインタ配列キャストは問題ないがC99等規格から見ると記述が間違っている等々、ツッコミビリティが高い/低いに関わらず、気になった所をご指摘いただきたく思います。3010:2003等の公式規格のどの部分を参照すれば良いのか(該当箇所なのか)教えていただけると非常に嬉しく思います。実行環境等の記載を忘れていました。それはそうと警告というのは致命的な問題はないものの危険なものを警告しているわけで、警告されたくないのであれば危険な行為を避けるか、警告を抑止するかのどちらかかと。14:232メモリ効率の良いコーディングを行いたいとのことですが、具体的に何がしたいのかが分かりません。このコードの配列のキャストに何の意味があるのでしょうか。ご指摘ありがとうございます。諸々前提情報が抜けておりました。環境やコンパイラオプション記載させていただきました。不足情報ありましたらご指摘いただけると助かります。例題が悪かったですね。libuvのストリームバッファを値渡しさせるようなイケてないコーディングをしていたのですが、ポインタキャストすれば早くなるのではないか?という疑問から始まりました。そもそもポインタ配列自体の理解が浅く、自分自身の理解度を図るため、単純化させていったところ上記のような簡単なコードに対する言語仕様としての理解も足りないことが判明しました。高速化云々は質問として適切ではなかったと思います。後ほど編集させていただきます。14:34自己レスですが、そもそもポインタは値渡しは行われないですね・・・勉強不足で申し訳ありません。調べているうちに混乱していたようです。票3そもそものタイトルにある「ポインタ配列」と言う表現ですが、「ポインタの配列」(ポインタを複数個持ちたいので配列にしている)なのか「配列へのポインタ」を持ちたいのかどちらなのでしょうか。char[16]へのポインタ」を表しています。char[64]へのポインタ」になります。警告が出て当然だと思うんですが。C言語では、式中の配列は(通常の文脈では)配列の先頭要素へのポインタに変換されますから、「配列へのポインタ」はかなりややこしい存在で、結構ベテランのCプログラマーでも取り扱いを間違えることがあります。ポインタについて理解が不十分なまま使わない方が良いでしょう。キャストという言葉も通常C言語では(型)式の形のキャスト構文の使用を表しますが、あなたの元のコードにはキャスト構文は出てきていないですね。あなたが提示されたコードを普通に書くとこうなります。(何をしたいのか具体的に示されていないので、余分なところはそぎ落としました。ary1;のところが、配列全体を代入していて効率が悪く見えるのかもしれませんが、先に書いたように先頭要素へのポインタを代入しているだけです。ちなみにコメント中で「値渡し」と言う言葉を連発しておられますが、通常「値渡し」と言うのは関数呼び出しのパラメータに使われる言葉で、代入文で配列の中身全部が渡されるのか先頭のアドレスだけが渡されるのか、を表す場合に使う言葉ではありません。ISOだのJISだの気張らずに、自分の理解が不十分なところを洗い出して、少しずつ解決していくことをお勧めします。個の銅バッジご回答ありがとうございます。ご指摘いただいた所が的を得ており、大変お恥ずかしい限りです。今後は質問する時にはわからない所を整理し、聞きたいことを明確にしたうえで投稿させていただきます。重ねてお礼申し上げます。私が意図していたのは「配列へのポインタ」でした。char配列)をコピーするのではなく、ポインタの参照先(表現あっていますか?)を切り替えることで、高速に処理できないか?というものでした。ご提示頂いたコードの場合、先頭要素へのポインタを代入しておりますが、ary2の要素数がわからないため、前述のunion共用体を通したアクセスができなくなってしまったため、どうにか解決しようと考えた結果、「要素数が異なる配列でも、参照先を切り替えればうまくいくのでは?」という結論になりました。悩んでいるいるうちにキャストや値渡し、参照渡し、そもそものポインタの意味も自分の中で曖昧になっていました。仰るとおり、ISOやJISだの言う前に、まずは自分の中での整理を付けてから出直したいと思います。ここでpary1[1]は64バイト先を指すのに対しpary2[1]は16バイト先を指す。このように異なる型での代入だから危険であり、警告されています。個の銅バッジご回答ありがとうございます。頂いた例示を早速試してみたのですが、なぜそうなるのかが理解できませんでした・・・。ary[64]というのが衝撃でした。15:09自己レスになりますが、上記は勉強して自力で理解するか、別質問として投稿しなおした方が良いと思いましたので、一旦回答済みにさせていただきます。皆様ご回答ありがとうございました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。