特定の型のポインタを宣言している間に実際にはどうなりますか?ポインタの算術演算または索引付け以外の型にポインタを指定する用途はありますか?ポインタ型を指定する理由は何ですか?
答えて
タイプは、ここで
ポインタ
- を以下で必要とされるポインタを逆参照の一例です。
{ char *ptr; //pointer of type char short j=256; ptr=&j; // Obviously You have to ignore the warnings printf("%d",*ptr) }
今では1バイトのみを読み込みますので、
ptr
はchar型であるため。しかし、256のバイナリ値は0000000100000000
ですが、ptr
のタイプはchar
なので、最初のバイトだけが読み取られるため、出力は0
になります。注:j = 127を指定すると、127が最初のバイトで保持されるため、出力は127になります。今
、
pointer arithmetic
の例:文var++
は{ int *ptr; int var=0; ptr=&var; var++; ptr++;// pointer arithmetic }
され、
ptr++
は同じものですか。 No、var++
は、var=var+1
を意味し、ptr++
は、ptr=ptr+4
を意味する。コンパイラはこれがポインタであり、ポインタがint
を指しているので、4
を1の代わりにptr
に追加するので、ポインタは次の整数を指します。
ポインタを間接参照すると、読み込むバイト数がわかるはずです。 Dereferencing char
ポインタは、メモリから1バイトを受け取ることを意味し、int
の場合、それは4バイトであり得る。
それはすべてですか?私は答えが "あなたが持っているから"と思った。 - auto x = * ptr; '、' func(* ptr); '... – LogicStuff
@LogicStuffごめんなさい。欠けていると感じたら、別の答えを加えることを検討してください。私はまた、主にCの観点からこの質問に答えました。なぜなら、その質問もそのようにタグ付けされていたからです。 –
ああ、それでは。私は、単にその質問の最初のコメントが何を言っているのかを言っていただけです。 – LogicStuff
データ型は、ポインタを逆参照して読み込む必要のあるデータ量を知るために必要です。
例:charポインタの参照解除は、指しているアドレスから次のバイトを読み取るべきですが、intポインタは2バイトを読み取る必要があります。
以上のためにこれを参照してください。Why is it necessary to declare the types that pointers point to?
ポインタはその値がここでは別の変数
のアドレスであるポインタ型のためのいくつかの例は、可変である。
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
実際のデータ・タイプ整数、浮動小数点数、文字数などのすべてのポインタの値のうち、メモリアドレスを表す長い16進数は同じです。
異なるデータ型のポインタとの間の唯一の違いは、データ変数の型または
これはすべて定義に適しています。データ型を知っているときに得られるのは、ポインタの使用法に関するものです。 –
"すべてのポインタの値の実際のデータ型、...は同じです"。それは(必ず)真実ではありません。ワードでアドレス指定されたマシンは、ワードのアドレス(通常は整数、浮動小数点、および構造ポインタを扱う)に1つのデータ型を使用し、ワードのアドレス+ワード内のオフセット(charポインタとボイドポインタ)。セグメント化されたアーキテクチャーでは、 "関数へのポインタ"に異なる型を使用することが多く、 "メンバー関数へのポインター"/"メンバー関数へのポインター"というまったくの楽しいゲームやゲームがあります。 –
ポインタへのポインタポイントは、クラスの有効なオブジェクトを指していることを定数です。タイプがない場合、クラスのメンバーにアクセスするための情報を取得できません。ポインタの
class CPerson
{
public:
std::string GetName();
};
CPerson oPerson;
CPerson *pObj_1 = &oPerson;
pObj_1->GetName();
void *pObj_2 = &oPerson;
pObj_2-> ?? // what all I can access now ?
- サイズ:何バイトにアクセスしますか? 1バイトの
char
の読み取り/書き込みは、long
以上の4オクテットの書き込みと同じではありません。 - アライメント:2つのタイプは同じ長さであるかもしれないが、異なるアラインメントを有する。 1つのデータ型は特殊なレジスタに入れられ、これらのレジスタから/へのメモリの移動は特殊なアライメント要件を持ちます。
- 表記:同じ
sizeof
および_Alignof
であっても、表記が異なる場合があります。*float_ptr = 4
を割り当てた場合、4
は4.0
に変換されます。 - タイプ安全:
void **ptr1, **ptr2; *ptr1+*ptr2;
のようなグロス違反が検出されます。
- 1. このポインタが競合する理由は何ですか?
- 2. 第1ジェネリック型を指定する理由
- 3. C++:ポインタを返す関数がconstではない理由は何ですか?
- 4. BUILD_HOSTを指定する理由
- 5. C opaqueポインタを指すフィールドを定義するRustイディオムとは何ですか?
- 6. オブジェクト指向のCRUDプログラム - オブジェクト指向設計の理由は何ですか?
- 7. この/ selfポインタを明示的に指定する利点は何ですか?
- 8. Java 8ラムダ構文で引数型を指定する必要がある理由はありますか?
- 9. 正しいデータ型を使用する理由は何ですか?
- 10. これが「未定義」を返す理由は何ですか?
- 11. ディレクティブがクラスを設定しない理由は何ですか?
- 12. iPhoneクラッシュログ - 理由は何ですか?
- 13. match.errorの理由は何ですか?
- 14. 理由は何ですか:laravel 5
- 15. sqliteロールバックの理由は何ですか?
- 16. `NULL`ポインタを持つ変換指定子` p`の動作は何ですか?
- 17. 二重否定の理由は何ですか - ( - n)?
- 18. C++:ポインタ型を指定すると、どのようにpointee型を回復できますか?
- 19. 我々は定数int型RC_SIGN_INを使用する理由= 007
- 20. 警告の理由 "ポインタにNULL許容タイプ指定子がありません"。
- 21. 指定する型
- 22. ポインタはどのデータ型を指していますか?
- 23. Pythonで '//'を使用する理由は何ですか?
- 24. DateFormatで日付を解析する理由は何ですか?
- 25. gVimでフォントを無効にする理由は何ですか?
- 26. ポインタが明白な理由で何も表示されない
- 27. Java:このようなキャラクターを定義する理由は何ですか?
- 28. データベースに承認ルールを設定する理由は何ですか?
- 29. 最小のJavaヒープサイズを設定する理由は何ですか?
- 30. これをDartの固定長リストにする理由は何ですか?
タイプがないと、ポインタの意味をどのように知ることができますか? – RedX
場所が割り当てられているデータの種類を知らなくても、ポインタを使用してメモリの場所にデータを書き込む方法はありますか? – haccks
関連または重複:[C++でポインタ変数と参照変数の違いは何ですか?](http://stackoverflow.com/q/57483/514235) – iammilind