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

メモリに格納されている別の値を「指す」データ型。ポインタ変数には、他のエンティティ(変数または関数または他のエンティティ)のメモリアドレスが含まれています。このタグは、参照ではなくポインタの使用を含む質問に使用する必要があります。ポインターを使用する最も一般的なプログラミング言語は、C、C ++、Go、およびアセンブリ言語です。特定の言語タグを使用します。他の有用なタグは、メソッド、関数、構造体などで、ポインタの使用を説明しています。


6
なぜ配列のアドレスがCの値と等しいのですか?
次のコードビットでは、ポインタ値とポインタアドレスが予想どおりに異なります。 しかし、配列の値とアドレスはそうではありません! どうすればいいの? 出力 my_array = 0022FF00 &my_array = 0022FF00 pointer_to_array = 0022FF00 &pointer_to_array = 0022FEFC #include <stdio.h> int main() { char my_array[100] = "some cool string"; printf("my_array = %p\n", my_array); printf("&my_array = %p\n", &my_array); char *pointer_to_array = my_array; printf("pointer_to_array = %p\n", pointer_to_array); printf("&pointer_to_array = %p\n", &pointer_to_array); printf("Press ENTER to …
189 c  pointers  arrays 

13
Cはそれほど難しくありません:void(*(* f [])())()
今日は写真を見ただけで説明をいただければと思います。だからここに写真があります: 私はこれを混乱させ、そのようなコードがこれまでに実用的であるかどうか疑問に思いました。私は写真をグーグルで検索して、この redditエントリに別の写真を見つけました。ここにその写真があります。 それで、この「螺旋状に読む」は有効なものですか?これはCコンパイラの解析方法ですか? この奇妙なコードについて、より簡単な説明があればすばらしいでしょう。 すべてのほかに、これらの種類のコードは役に立ちますか?もしそうなら、いつ、どこで? 「スパイラルルール」についての質問がありますが、私はそれがどのように適用されるのか、またはそのルールで式がどのように読み取られるのかを尋ねているだけではありません。私はそのような表現の使用法とスパイラルルールの妥当性についても質問しています。これらについては、いくつかの良い答えがすでに投稿されています。


2
なぜ「これ」はポインタであり、参照ではないのですか?
私はこの質問C ++の賛否両論の回答を読んでいて、コメントを読んでいるときにこの疑問を感じました。 プログラマは、「これ」がポインタであり、参照ではないことを混乱させることがよくあります。"hello"がstd :: string型ではないが、char const *(ポインター)に評価される理由は別の混乱です(配列からポインターへの変換後)– Johannes Schaub-litb Dec 22 '08 at 22:56 これは、他の(後の)言語と同じ規則を使用していないことを示しています。– le dorfier 2008年12月22日3:35 私は「これ」のものをかなり些細な問題と呼びます。そして、おっと、私の未定義の動作の例でいくつかのエラーをキャッチしてくれてありがとう。:)私はサイズに関する情報が最初のもので何と関係があるのか​​理解していませんが。ポインターは、割り当てられたメモリの外を指すことは許可されていません。 これは絶え間ないpoinerですか?– yesraaj 2008年12月22日6:35 メソッドがconst int getFoo()constの場合、これは定数にすることができます。<-getFooのスコープでは、「this」は定数なので、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないことがある程度保証されます。– Doug T. Dec 22 '08 at 16:42 「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、「this =&other;」を実行できません。これはタイプT *であり、タイプT constではありません。つまり、それは非定数ポインターです。constメソッドを使用している場合は、constへのポインタです。T const。しかし、ポインタ自体は非定数です– Johannes Schaub-litb '08 / 12/22 17:53 「this」は次のように考えてください。#define this(this_ + 0)は、コンパイラが「this_」をオブジェクトへのポインタとして作成し、「this」をキーワードにします。(this_ + 0)は右辺値なので、「this」を割り当てることはできません。もちろん、それはそうではありません(そのようなマクロはありません)が、それを理解するのに役立ちます– Johannes …

8
Cのvoidポインターのポインター演算
特定の型へのポインタを(言うときint、char、float、...)がインクリメントされ、その値はそのデータ型のサイズだけ増加されます。voidサイズのデータ​​を指すポインターxがインクリメントされた場合、xバイト先をどのように指すのですか?コンパイラーxは、ポインターの値に追加することをどのようにして知っていますか?


29
Cポインターについて人々は何が難しいと思いますか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 ここに投稿された質問の数から、ポインタとポインタ演算について頭を悩ますとき、人々がいくつかのかなりの根本的な問題を抱えていることは明らかです。 その理由を知りたいです。彼らは私に大きな問題を実際に引き起こしたことはありません(私は最初に新石器時代にそれらについて知りましたが)。これらの質問に対するより良い答えを書くために、人々が難しいと思うことを知りたいのです。 それで、ポインタに苦労している場合、または最近「突然」気がついた場合、問題の原因となったポインタの側面は何でしたか?
173 c  pointers 


6
Cで、ポインターを解放する前にキャストする人がいるのはなぜですか?
私は古いコードベースで作業しており、free()のほとんどすべての呼び出しはその引数にキャストを使用します。例えば、 free((float *)velocity); free((float *)acceleration); free((char *)label); ここで、各ポインターは対応する(および一致する)タイプです。私はこれをする意味が全くないと思います。これは非常に古いコードなので、K&Rなのかどうか疑問に思います。もしそうなら、私は実際にこれを必要としたかもしれない古いコンパイラをサポートしたいので、それらを削除したくありません。 これらのキャストを使用する技術的な理由はありますか?私はそれらを使用する実用的な理由の多くを見さえしません。解放する直前にデータ型を思い出すポイントは何ですか? 編集:この質問は他の質問の重複ではありません。もう1つの質問は、この質問の特別なケースです。近い投票者がすべての回答を読んでいれば明らかです。 Colophon:「const答え」にチェックマークを付けています。これは、これを行う必要があるのは本当の理由です。ただし、それがANSI Cより前のカスタムであることについての回答(少なくとも一部のプログラマの間で)が、私の場合に使用された理由のようです。ここには多くの人々による良い点がたくさんあります。あなたの貢献に感謝します。
167 c  pointers  casting 

10
オブジェクト全体またはオブジェクトへのポインターをコンテナーに格納する必要がありますか?
新しいシステムを一から設計する。STLを使用して、特定の長寿命オブジェクトのリストとマップを保存します。 質問:オブジェクトにコピーコンストラクターがあり、オブジェクトのコピーをSTLコンテナー内に格納していることを確認する必要がありますか、それとも通常は自分でライフとスコープを管理し、それらのオブジェクトへのポインターをSTLコンテナーに格納するだけの方が良いですか? 私はこれが詳細にいくらか不足していることを理解していますが、私はこれらの解決策の両方が可能であることを知っているので、存在する場合は「理論的な」より良い答えを探しています。 ポインターを操作することの2つの非常に明らかな欠点:1)これらのオブジェクトの割り当て/割り当て解除を、STLを超えたスコープで自分で管理する必要があります。2)一時オブジェクトをスタックに作成してコンテナに追加できません。 他に欠けているものはありますか?
162 c++  stl  pointers 

8
C ++ライブラリとフレームワークがスマートポインターを使用しないのはなぜですか?
私はいくつかの記事を読んで、生のポインタはほとんど使用してはならないことを述べました。代わりに、スコープ付きポインターでも共有ポインターでも、常にスマートポインター内にラップする必要があります。 しかし、Qtのようなフレームワーク、wxWidgets、Boostのようなライブラリーは、スマートポインターをまったく使用していないかのように、返ったり期待したりしないことに気づきました。代わりに、生のポインタを返すか期待します。その理由はありますか?パブリックAPIを作成するとき、スマートポインターに近づかないでください。なぜですか。 多くの主要なプロジェクトがスマートポインターを回避しているように思われるのに、なぜスマートポインターが推奨されるのか疑問に思っています。

8
Cを使用して配列を返す
私はCに比較的慣れていないので、配列を処理するメソッドについてサポートが必要です。Javaプログラミングから来て、私はint [] method()配列を返すために言うことができることに慣れています。ただし、Cでは、配列を返すときに配列のポインタを使用する必要があることがわかりました。私は新しいプログラマーであり、私がこれまで調べてきた多くのフォーラムがあっても、これをまったく理解していません。 基本的に、Cでchar配列を返すメソッドを記述しようとしています。メソッドにreturnArrayという名前の配列を提供します。前の配列から新しい配列を作成し、その配列へのポインターを返します。これを開始する方法と、配列から送信されたポインターを読み取る方法について、いくつかの助けが必要です。これを説明する助けがありがたいです。 配列を返す関数のコード形式の提案 char *returnArray(char array []){ char returned [10]; //methods to pull values from array, interpret them, and then create new array return &(returned[0]); //is this correct? } 関数の呼び出し元 int main(){ int i=0; char array []={1,0,0,0,0,1,1}; char arrayCount=0; char* returnedArray = returnArray(&arrayCount); ///is this correct? for (i=0; …
152 c  arrays  pointers  char 

18
ポインターを削除した後でNULLにすることは良い習慣ですか?
まず、スマートポインタを使用することから始めます。これについて心配する必要はありません。 次のコードの問題は何ですか? Foo * p = new Foo; // (use p) delete p; p = NULL; これは、別の質問に対する回答とコメントによって刺激されました。Neil Butterworthからの1つのコメントで、いくつかの賛成票が生成されました。 削除後にポインターをNULLに設定することは、C ++では普遍的な推奨事項ではありません。これを行うのが良い場合もあれば、無意味でエラーを隠すことができる場合もあります。 それが役に立たない状況はたくさんあります。しかし、私の経験では、害はありません。誰かが私を啓発します。

12
なぜx [0]!= x [0] [0]!= x [0] [0] [0]なのですか?
私はC ++を少し勉強していて、ポインタを使って戦っています。次のように宣言することで、3レベルのポインタを使用できることを理解しています。 int *(*x)[5]; これ*xは、へのポインタである5つの要素の配列へのポインタintです。また、私はそれを知っているx[0] = *(x+0);、x[1] = *(x+1)ようにして.... それで、上記の宣言を考えると、なぜx[0] != x[0][0] != x[0][0][0]ですか?
149 c++  c  arrays  pointers 

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