私は最近、ポインターに関する非常に高く評価されている優れた記事を見直していました。 読み進めるうちに、ポインタとは何かが理解できるようになりました。残念ながら、私はまだそれらを使用することができません。
理由は次のとおりです。ネーミングがわかりません。または、実際にはポインターのアプリケーションです。いくつかの「学びたい」本や記事を読んだ後、「ポインターを作成してインスタンス化する方法」という同様のコードに何度も遭遇しました。
答えるときは、サンプルコードを使用して、実際にポインターが出力するものを示してください。
コードは次のとおりです。
char ch = 'c';
char *chptr = &ch;
または、おそらくもっと紛らわしい:
char ch = 'c';
char *chptr;
chptr = &ch;
chptr
は、 という名前の他の 2 つの変数とは異なる名前であることに注意してくださいch
。3 つの変数すべてに名前を付けてみませんch
か? ポインターに別の名前を付けると、どのような問題が解決しますか?
また、コードの最初のブロックには...*chptr = &ch;
;があります。2番目に、chptr = &ch;
. 2 番目のブロックでアスタリスクを削除してもよい理由は何ですか?
次に、ポインターのアプリケーションは何ですか。ポインターは常に必要ですか (ポインターが必要な場合と不要な場合)? 回答を送信した後、私は自信を持っています。ポインターを使用するより複雑なコードを理解できると信じており、言語を直感的に適応させ続けるのに十分です。まだまだ好奇心旺盛ですが。
たとえば、次のコード ブロックを使用します。
typdef struct person
{
char *name;
int age;
}
存在しない名前変数へのポインターとして名前を宣言する理由と、ポインターを使用せずに年齢変数を int として宣言する理由は何ですか? このブロックのために、それは意味がありません:
int main()
{
/* below, the int is a pointer */
int *p;
void *up;
return 0;
}
またはこのブロック:
char *sp;
sp = "Hello";
printf("%s",sp);
ポインターはアドレスを指していると思いました。「こんにちは」は住所ではありません。
前の 2 つのブロックを念頭に置いて、この最後のブロックを見てください。
int main()
{
int i,j;
int *p;
i = 5;
p = &i;
j = *p; //j = i?
&p = 7; //i = 7?
}
j を &i に設定し*p = &i
ないでi
ください。また&p = 7
、p のアドレスを 7 に設定すべきではありませんが、これは i ではない可能性があります。