質問: C言語を大学でやっているのですが、ポインタが出てきてから全然分かりません。C言語が出来ないと他の言語も出来ませんかね。。
回答: 多分ですけど、 教え方が良くないのではないかと思います。 その大学の講義を聞いていない状態で、一方的で、申し訳ないですが。。。 ポインタは、C言語特有の考え方です(Cと、C++)。なので、最近の言語では、まず、出てきません。 ポインタを使うことで、メモリの状態を自由に扱うことができるので、逆に、今風の言語で、何かしたいというときに、どうすればいいのか、分からなくなってしまうこともあります。 ちなみに、ポインタの説明をしておくと(大学の講義的に、今後、必要ということであれば)、 int a; とすると、整数を入れるための、aという変数を用意する。という意味です。 メモリ上に、a用のエリアが確保されます。変数の場所は、アドレスと呼ばれたりします。 いわゆる、int型。 int *p; とすると、pには、「「整数を入れるための変数」の場所」を入れることになります。つまり、アドレスを入れるための変数ということです。 型は、int* です(*までが型)。 例えば、上に書いた変数 a の場所を入れる というような使い方をします。 int a; a = 10; とすると、整数を入れる変数 a に10 を入れる。という感じです。 変数の頭に「&」を付けると、その変数のメモリ上の場所を表します。 なので、 int *p; p = &a; とすることで、変数a の、メモリ上での場所(アドレス)を、pに入れます。 ポインタの使い方ですが、ポインタ変数の頭に「*」を付けると、 (ポインタの変数には、何かの変数のアドレスが入っていますので)、その、アドレスの指す先を表すことができます。 つまり、 p = &a; で、 *p とすると、*pは、aの変数を指します。 printf( "%d", *p ); で、aの中を表示できますし、 *p = 100; とすれば、変数aの値を変えることができます。 基本的には、これがすべてです。 char x; だと、 char *px; px = &x; のような感じ。 ポインタは、変数のアドレスを入れるための変数です。 なので、自分でメモリを確保して、その確保したアドレスを入れるというような使い方もしたりします。 int *p; p = malloc( sizeof(int) ); というような感じ。 malloc()は、メモリを確保しなさいという関数で、どれくらい確保するのかが引数で、上では、int型の変数のサイズ分を指定しています。確保した際のアドレスが戻り値として返ってきます。 本当は、 p = (int *)malloc( sizeof(int) ); のように型を明示してやります。 大学の講義が、どこまでの範囲か分からなかったので、ひょっとしたら、malloc()の部分は、余計だったかもしれません。