タグ付けされた質問 「pointers」

ポインタは、その値を使用してコンピュータメモリの別の場所に格納されている別の値を直接参照する(または「ポイントする」)データ型です。

22
null参照は本当に悪いことですか?
プログラミング言語にnull参照を含めることは「10億ドルの間違い」だと言ったと聞きました。しかし、なぜ?確かに、それらはNullReferenceExceptionsを引き起こす可能性がありますが、それではどうでしょうか?不適切に使用すると、言語の要素がエラーの原因になる可能性があります。 そして、代替手段は何ですか?私はこれを言う代わりに: Customer c = Customer.GetByLastName("Goodman"); // returns null if not found if (c != null) { Console.WriteLine(c.FirstName + " " + c.LastName + " is awesome!"); } else { Console.WriteLine("There was no customer named Goodman. How lame!"); } あなたはこれを言うことができます: if (Customer.ExistsWithLastName("Goodman")) { Customer c = Customer.GetByLastName("Goodman") // throws error …

4
Java参照はCポインターとどのように異なりますか?
Cにはポインターがあり、Javaには参照と呼ばれるものがあります。彼らはすべてが何かを指しているという意味でいくつかの共通点を持っています。Cのポインターは、それらが指すアドレスを格納することを知っています。参照には住所も保存されますか?ポインターがより柔軟でエラーが発生しやすいことを除いて、それらはどのように違いますか?
97 java  c  pointers  reference 

16
若い人はポインターの概念を学ぶ必要がありますか?
CマスターのDennis RitchieがCにポインターを導入したのはなぜですか?そして、なぜVB.NETやJavaやC#などの他のプログラミング言語がそれらを排除したのですか?Googleでいくつかのポイントを見つけました。あなたのコメントも聞きたいです。なぜ現代の言語でポインターの概念を排除するのですか? Cは基本的な言語であり、ポインターはCを強力で際立ったものにし、Cをより現代的な言語と競争させる概念であると人々は言います。それから、なぜ彼らはより近代的な言語のポインターを排除したのですか? 新しいプログラマーにとって、ポインターの知識はまだ重要だと思いますか?最近人々はVB.NETまたはJavaを使用していますが、これはCよりも高度な機能をサポートしており(ポインターの概念を使用していません)、現在見ている多くの人々(私の友人)は、高度な機能をサポートするためCを無視してこれらの言語を選択します。Cから始めるように伝えます。Cでは不可能なVB.NETまたはJavaの高度なことをしているときに、ポインターの概念を学ぶのは無駄だと言います。 どう思いますか? 更新: Googleで読んだコメントは次のとおりです。 初期のコンピューターは遅すぎて最適化されていませんでした。 ポインターを使用すると、アドレスに直接アクセスできるようになり、関数呼び出しでアドレスのコピーを作成する代わりに時間を節約できます。 ポインターを使用するとセキュリティが著しく低下するため、JavaとC#にはポインターが含まれていません。 これらと、さらに私が見つけたもの。私はまだいくつかの貴重な答えが必要です。それは大歓迎です。

30
ポインターの良い説明は何ですか?[閉まっている]
あなた自身の研究で(あなた自身で、またはクラスで)、最終的に、本当にポインターを理解した「あはは」の瞬間がありましたか?特に効果的と思われる初心者プログラマ向けの説明はありますか? たとえば、初心者がCで最初にポインターに出会ったとき、コンパイルされるまで&sと*sを追加するだけです(私自身もそうでした)。おそらく、あなたやあなたの学生のためにポインタを「クリック」させたのは、写真、または非常にやる気のある例でした。それは何でしたか、それがうまくいかない前に何を試しましたか?トピックの前提条件(構造体、配列など)はありましたか? つまり、&sおよびの意味を理解するために必要なのは*、自信を持ってそれらを使用できる場合ですか?構文と用語やユースケースを学ぶだけでは十分ではなく、ある時点でアイデアを内部化する必要があります。 更新:私はこれまでのところ答えが本当に好きです。どうぞ来てください。ここには多くの素晴らしい視点がありますが、概念を内面化した後、私たち自身にとって多くは良い説明/スローガンだと思います。私はそれがあなたに夜明けになったときの詳細なコンテキストと状況を探しています。 例えば: Cでは、ポインターを構文的に少ししか理解していませんでした。2人の友人がポインターを別の友人に説明しているのを聞きstructました。最初の友人は、それをどのように参照および変更する必要があるかについて話しましたが、それは私にぶつかった他の友人からの短いコメントでした:「より効率的です」。16バイトではなく4バイトを渡すことが、私が必要とする最後の概念的なシフトでした。

17
ポインターを使用して解決するのに最適なプログラミング問題は何ですか?[閉まっている]
まあ、私は基本的にポインタの使用方法を理解していますが、より良いプログラミングを行うためにそれらをどのように使用するのが最善かはわかりません。 ポインターを使用することで解決できる、良いプロジェクトや問題は何ですか?


4
C ++では、仮想関数はなぜそしてどのように遅いのですか?
誰でも詳細に、仮想テーブルが正確にどのように機能するか、仮想関数が呼び出されたときにどのポインターが関連付けられるかを詳細に説明できますか。 実際に遅い場合、仮想関数の実行にかかる時間が通常のクラスメソッドよりも長いことを示すことができますか?いくつかのコードを見なくても、どのように/何が起こっているのかを簡単に見失うことがあります。

1
raw、weak_ptr、unique_ptr、shared_ptrなど…賢明な選択方法は?
C ++には多くのポインタがありますが、C ++プログラミング(具体的にはQt Frameworkを使用)で5年ほど前に正直に言うと、古い生のポインタのみを使用します。 SomeKindOfObject *someKindOfObject = new SomeKindOfObject(); 私は他にも多くの「スマート」ポインターがあることを知っています。 // shared pointer: shared_ptr<SomeKindofObject> Object; // unique pointer: unique_ptr<SomeKindofObject> Object; // weak pointer: weak_ptr<SomeKindofObject> Object; しかし、私はそれらをどうするか、生のポインタの比較で彼らが私に何を提供できるのかについて少しも考えていません。 たとえば、次のクラスヘッダーがあります。 #ifndef LIBRARY #define LIBRARY class LIBRARY { public: // Permanent list that will be updated from time to time where // each items …

19
実際のアプリケーションでは、128ビットのフラットアドレス空間が必要になりますか?
これは少し「1メガバイトあれば誰でも十分」ということですが、... 64ビットのフラットアドレス空間は、32ビットのアドレス空間よりも最大43億倍のスペースを許可します。これは17,179,869,184 GiBです。 明らかに、8ビットから16ビットへの移行は非常に迅速でした(80年代の10代で物事を表示していますが、これらのメインフレームとミニはすべて、エリートのポートを実行できなかったため無視しています)。16ビットから32ビットへの移行には少し時間がかかり、実際には32ビットがかなり長く続きました。 64ビットになりましたが、「17,179,869,184 GiBで誰にでも十分」と言うのは愚かでしょうか? プログラミングの観点を本当に念頭に置いているので、これはプログラマーの質問です。いつかコンピューターに一見無限の作業メモリーがあるように見えても、それはアプリケーションが一見無限のフラットなアドレス空間を見る必要があるという意味ではありません。 基本的に、プログラマーは安reliefのため息をついて「まあ、少なくとも整数や浮動小数点数が何であれ、少なくともポインターが成長することを心配する必要はない」と言うことができますか?

10
ポインターがC言語で保持するデータの「タイプ」とは何ですか?
ポインタがアドレスを保持していることを知っています。ポインターのタイプは、ポインターが指すデータの「タイプ」に基づいて「一般に」知られていることを知っています。ただし、ポインターは依然として変数であり、ポインターが保持するアドレスにはデータ「タイプ」が必要です。私の情報によると、アドレスは16進形式です。しかし、この16進数のデータの「タイプ」はまだわかりません。(16進数が何であるかはわかっていますが、10CBA20たとえば、この文字列は整数ですか?整数ですか?アドレスにアクセスしてそれ自体を操作したい場合は、そのタイプを知る必要があります。私が尋ねている理由です。)
30 c  pointers 


10
ポインター変数の使用はメモリのオーバーヘッドではありませんか?
CやC ++などの言語では、変数へのポインターを使用しているときに、そのアドレスを格納するためにもう1つのメモリの場所が必要です。これはメモリのオーバーヘッドではありませんか?これはどのように補償されますか?ポインターは、タイムクリティカルな低メモリアプリケーションで使用されていますか?
29 c++  c  pointers 

3
一部のマシンでlong intに12バイトかかるのはなぜですか?
私のマシンでこのコードをコンパイルした後、奇妙なことに気付きました: #include <stdio.h> int main() { printf("Hello, World!\n"); int a,b,c,d; int e,f,g; long int h; printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x", &a,&b,&c,&d,&e,&f,&g,&h); return 0; } 結果は次のとおりです。すべてのintアドレスの間に4バイトの違いがあることに注意してください。ただし、最後のintとlong intの間には、12バイトの違いがあります。 Hello, World! The addresses are: da54dcac da54dca8 da54dca4 da54dca0 da54dc9c da54dc98 …
26 c  memory  pointers 

4
なぜC ++とJavaの両方が「参照」の概念を使用しますが、同じ意味では使用しないのですか?
C ++では、関数への参照引数により、関数が参照を他のものに参照させることができます。 int replacement = 23; void changeNumberReference(int& reference) { reference = replacement; } int main() { int i = 1; std::cout << "i=" << i << "\n"; // i = 1; changeNumberReference(i); std::cout << "i=" << i << "\n"; // i = 23; } 同様に、関数への定数参照引数は、参照を変更しようとするとコンパイル時エラーをスローします。 void changeNumberReference(const int& reference) …
26 java  c++  pointers  reference 

3
ポインタをインクリメントする理由
私は最近C ++の学習を始めましたが、ほとんどの人が(これまで読んでいたことによると)ポインターに苦労しています。 伝統的な意味ではなく、私はそれらが何であり、なぜ使用されているのか、どのように役立つのかを理解していますが、ポインタのインクリメントがどのように役立つかを理解することはできません、誰もポインタのインクリメントが便利な概念と慣用的なC ++? この質問は、Bjarne StroustrupによるA Tour of C ++の本を読み始めた後に出てきたものです。 。
25 c++  c  pointers 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.