問題タブ [pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Cでのこれらの宣言の違いは何ですか?
CおよびC++では、次の宣言は何をしますか?
上記の宣言のいずれかが間違っていますか?
そうでない場合、それらの意味と違いは何ですか?
上記の宣言の有用な使用法は何ですか(つまり、C / C ++ /埋め込みCでそれらを使用する必要がある状況で)?
c - Mallocエラー:解放されたオブジェクトのチェックサムが正しくありません
私は課題のテールの実装に取り組んでいます。私はそれを正しく動作させていますが、ランダムな時間に無料でエラーが発生しているようです。
一貫性がある以外のパターンや何かにそれを追跡するために、私は見ることができません。
たとえば、プログラムを「tail -24 test.in」と呼ぶと、複数回実行すると同じ行で誤ったチェックサムエラーが発生します。ただし、ファイルが異なり、印刷する行数が異なる場合でも、エラーなしで戻ってきます。
問題を追跡する方法についてのアイデアは、何時間も無駄にデバッグしようとしてきました。
問題のあるコードは次のとおりです。
行はchar**として定義され、mallocは次のようになります。
c - Cのポインターから配列のサイズを取得するにはどうすればよいですか?
次のようなmystruct
サイズの「配列」を割り当てました。n
後で、私は にしかアクセスできp
なくなりましn
た。ポインタだけを指定して配列の長さを決定する方法はありますp
か?
まさにそれを行うので、それは可能でなければならないfree(p)
と思います。私malloc()
は、割り当てられたメモリの量を追跡していることを知っています。それが長さを知っている理由です。おそらく、この情報を照会する方法はありますか? 何かのようなもの...
わかるようにコードを作り直す必要があることはわかっていますが、できればそうしn
たくありません。何か案は?
objective-c - Cでのポインタ演算と添字による配列値へのアクセス
私は、Cでは、ポインター演算を使用する方が、配列アクセスの添え字よりも一般的に高速であることを読み続けています。これは、最新の(おそらく最適化されている)コンパイラーでも当てはまりますか?
もしそうなら、私がCの学習からObjective-CとMacのCocoaに移行し始めたとき、これはまだ当てはまりますか?
CとObjective-Cの両方で、配列アクセスに適したコーディングスタイルはどれですか?(それぞれの言語の専門家によって)より読みやすく、より「正しい」(より良い用語がないため)と見なされるのはどれですか?
c - ポインターと配列を含む 2 つの宣言の違い
int *a[3]
とはどう違いint (*a)[3]
ますか?
c - Cの関数ポインタを使用して関数を呼び出すことはできますか?
関数ポインタを使用して関数を呼び出すことはできますか?はいの場合はどうですか?
c++ - オブジェクトの配列を動的に割り当てる
動的に割り当てられた配列を含むクラスがあります。
しかし今、これらのクラスの動的に割り当てられた配列を作成したいと考えています。これが私の現在のコードです:
しかし、これはひどく爆発します。(呼び出しで)作成された新しいA
オブジェクトは、ループの反復が終了すると破棄されるため、これはそのインスタンスの内部が-ed になることを意味します。A(3)
for
myArray
A
delete []
それで、私の構文はひどく間違っているに違いないと思いますか? やり過ぎと思われる修正がいくつかあると思いますが、避けたいと思っています。
- のコピー コンストラクタを作成します
A
。 vector<int>
andを使用vector<A>
するので、これらすべてについて心配する必要はありません。- オブジェクト
arrayOfAs
の配列ではなく、ポインターの配列にします。A
A*
これは、内部動的割り当てを持つものの配列を動的に割り当てようとするときに実際に機能する構文がある初心者向けのものだと思います。
(また、私が C++ を使用してからしばらく経っているので、スタイルの批評も高く評価されています。)
将来の視聴者向けの更新: 以下の回答はすべて非常に役に立ちます。コード例と便利な「4 のルール」により、Martin のコードは受け入れられますが、すべてを読むことを強くお勧めします。何が間違っているかを簡潔に述べた優れたものもあれば、vector
s がどのように、そしてなぜ良い方法なのかを正しく指摘しているものもあります。
c - 構造体へのポインター/参照を関数に渡す
これはばかげた質問のように聞こえるかもしれませんが、私はまだ C を学んでいるので、ご容赦ください。:)
私は K&R (構造体) の第 6 章に取り組んでおり、これまでのところ、この本は大きな成功を収めています。私は構造体をかなり扱うことに決めたので、この章の早い段階で point と rect の例を使って多くの作業を行いました。私が試したかったことの 1 つは、canonrect
ポインターを介して関数 (第 2 版、p 131) の動作を変更することvoid
でした。
私はこれを機能させていますが、皆さんが私を助けてくれることを望んでいた問題に遭遇しました。canonRect
一時的な四角形オブジェクトを作成し、その変更を実行してから、渡されたポインターを一時的な四角形に再割り当てして、コードを簡素化したいと考えていました。
しかし、そうすると、rectは変わりません。代わりに、渡された rect のフィールドを手動で再設定していることに気付きますが、これはうまくいきます。
コードは次のとおりです。
だからここに質問があります:
- なぜ機能し
r = &temp;
ないのですか?(これは、ポインターではなく参照を渡すためだと思います。参照は変更可能ではなく、ポインターは変更可能であると考えるのは正しいですか?) - へのポインターを渡そうとすると、不正なインダイレクションのコンパイル時エラーが発生するのはなぜ
canonRect
ですか? (IE、私が持っていcanonRect(*r);
た場合main()
。)
1. の答えはすでにわかっていると思いますが、2. は私を困惑させます。ポインターを渡すことは合法だと思っていました。
とにかく... Cの初心者を許してください。
c++ - リンクされたリストに新しいノードを追加するための新しいアプローチ
上記のコードは、リンクされたリストの先頭に新しいノードを追加するための一般的に間違ったバージョンの関数です。一般的に、正しいバージョンは次のようになります。
うまく機能する目的のために、別の単純な関数を作成しました。
しかし、これがコードやチュートリアルで使用または議論されているのを見たことがないので、このアプローチに何らかの欠陥があるかどうか知りたい.
c - ポインターと const char[] の C エラー
反復しようとしている const char arr[] パラメータがあります。
エラーが表示されます: 割り当てにより、ポインター ターゲット型から修飾子が破棄されます
const char [] は非 const とは異なる方法で処理されますか?