私はC/C++での初心者ですが、私はまさにこのコードで行われているもの、理解することができませんでした:事前にconst void * in((struct str_name *)p)の使用 - > str_dataitem;
const void *p; //declaration of p used above
感謝!!
私はC/C++での初心者ですが、私はまさにこのコードで行われているもの、理解することができませんでした:事前にconst void * in((struct str_name *)p)の使用 - > str_dataitem;
const void *p; //declaration of p used above
感謝!!
ポインタはメモリ内のアドレス(場所)を格納するので、ポインタ自体に格納されたデータ(場所)はメモリのその場所に格納された実際の型に依存しません。
もしタイプvoid *
のポインタを宣言する
int
、
float
、
struct
Sなど)とすることができる変数/オブジェクトのアドレスを格納することを意味します。どのタイプのデータがそこに格納されているかを知らずに、無効ポインタに格納されたデータに直接アクセスすることは意味がありません。で保存
あなたは
((struct str_name*)p)->str_dataitem;
を使用するときは、明示的にタイプstruct str_name
のオブジェクトを保存するかのようにでメモリを扱う(そして、次の)必要がありますコンパイラp
を伝え、その構造内にstr_dataitem
メンバーにアクセスp
。
void *はPythonの変数のように動作しますか?データ型と「任意の回数」に使用できることを意味します。毎回違う型で宣言できますか? @leyanpan – Sunil
No. void *はポインタです(これはPythonでは存在しません)、アドレスを格納するだけです(整数iとして考えることができます。これは、データの一部がiメモリ、実際にはそうではありませんが)。それらはすべてメモリにアドレスを格納し、実際には同じものですが、コンパイル時には別の扱いをするため、他の型のポインタ(struct str_name *など)にしかキャストできません。型のp(struct str_name)にオブジェクトがすでに格納されている場合にのみ、キャストが意味を持ちます。変数の型はCで変更することはできません。 – leyanpan
キャストを複数回行うことができます(毎回異なるタイプを使用します) – Sunil
初心者の方は、それを教えるレベルに達するまで忍耐強くならないのはなぜですか? –
あなたはポインタについて何か知っていますか? – Pac0
[const int \ *、const int \ * const、int const \ *の違いは何ですか?](https://stackoverflow.com/questions/1143262/what-is-the-difference-between) -const-int-const-int-const-int-const-int-const) –