ID非公開

2021/5/12 10:51

77回答

C言語を大学でやっているのですが、ポインタが出てきてから全然分かりません。C言語が出来ないと他の言語も出来ませんかね。。

C言語関連 | プログラミング173閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

ID非公開

質問者2021/5/13 23:50

ありがとうございます!

ThanksImg質問者からのお礼コメント

ありがとうございました(__)

お礼日時:5/13 23:52

その他の回答(6件)

0

C言語をお手本にした言語は割と多くあるので、そういったものを学ぶ際に「C言語は習得済み」という状態は有利に働くでしょう。しかし、裏を返せば「有利になる」というだけで「習得不可能」というわけでもない。 それに、C言語の習得に挫折した原因がポインタだけであれば、ポインタという概念がない「他の似たような言語」なら習得できる…かも?です。

ID非公開

質問者2021/5/13 23:49

ありがとうございます!

0

多分ですけど、 教え方が良くないのではないかと思います。 その大学の講義を聞いていない状態で、一方的で、申し訳ないですが。。。 ポインタは、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()の部分は、余計だったかもしれません。

ID非公開

質問者2021/5/13 23:50

ありがとうございます!

2

JavaやC#など、現在主流となっている高級言語では、直接ポインタを扱うコードはほとんど出てこないので、Cで躓いても一応人並みに扱える可能性はあります。 ですが、学習が進むか職業エンジニアになれば、そうした言語でもポインタやアドレスを扱わざるをえない段階には入ってくるだろうから、いずれは直面せざるを得ないかもよ。

2人がナイス!しています

ID非公開

質問者2021/5/13 23:50

ありがとうございます!

1

C言語が分からなくても他の言語は出来ます、しかしポインタくらいでつまずくなら他の言語ではそれなりの世界がありそれを理解するのも難しいかと思います。 機械系なら制御装置などアセンブラレベルでコントロールするのでそれに対応できるC言語が出来ないと難しいのでは?システムが大きければハードにそくしたライブラリが用意されているかもですが小さなシステムではポートなど直にアクセスする必要があると思います。 ポインタ変数と言うのはコンピュータのメモリアドレスが入るエリアなのでメモリ構造を想像すれば分かりやすいかと思います。 ちなみにアセンブラ(CPU)ではインデックスレジスタと言うのが存在しそこにポインタアドレスを入れそのレジスタが指し示すメモリをアクセスします。

1人がナイス!しています

ID非公開

質問者2021/5/13 23:50

ありがとうございます!

0

ポインタは他のプログラミング言語にはほとんど登場しません、当然CPUの唯一理解できる機械語にも登場しないので、全然分からない人が多いようです、このように、最近のプログラミング言語では、機械語には無い技術や言葉のてんこ盛り状態で、C言語以外でも挫折してしまう人がいるようです、そろそろ、機械語よりも簡単なプログラミング言語作りに方向転換すべきと思います。なので、私自身は、ポインタも無い機械語よりも簡単なプログラミング言語を作ろうと頑張ています。ポインタに関して、はそれほど難しく考える必要はありません、単にアドレスを記憶出来るデータ型ですので、実際にどのように書けばプログラムが動くのか理解出来れば良いだけの話です。int i;のiはデータで&iはアドレスです、なので、&iはポインタに記憶出来ます、int *p;はポインタですので、pはアドレスで、*pがアドレスの内容の意味しか有りません。

ID非公開

質問者2021/5/13 23:49

ありがとうございます!