回答受付が終了しました

ID非公開

2020/11/15 15:15

44回答

c言語でポインタを学んだのですが、

C言語関連66閲覧xmlns="http://www.w3.org/2000/svg">25

回答(4件)

0

こういう場合は『わからない。教えて』じゃなくて、『どのようにわからないのか』を明示するといいですよ。 単に『わからない』だと、『的外れな回答』や『質問者さんが質問する前に調べたサイト等を提示する』とかみたいな、質問者さんにとって『コレジャナイ感』に見舞われますよ。 的確に言語化できなくても、たとえば ------------------------------------------- (自分が調べたサイトのURL1) (自分が調べたサイトのURL2) を読んで考えてみたのですが、 (自分なりの解釈)という事でしょうか。 でもその解釈だと、(自分の疑問)となりませんかね? それとも(自分なりの解釈)ということでしょうか? ------------------------------------------ という具合に、どうやって調べたとか、どのように疑問に思っているのかとかを提示するといいですよ。 皆が皆、同じ理由で躓くわけじゃないので。 実際、私は変数の概念自体では躓きませんでした。(ただ『型』が理解できていなかったようだけど当時は。) ですが、そもそも変数の概念がどうしてもわからないっていう人もいますし、 その説明しているサイトがめちゃくちゃだったりします。 (実際、オブジェクト指向の説明ってめちゃくちゃなのが多いし…) なので『どこがわからないのか』を明示するといいですよ。

0

アセンブラの勉強を自分のペースで勉強すればそのうち理解できまつw 他の方に喧嘩売るわけじゃないでつが、日本語で何行にも渡りダラダラと説明されても初心者は理解できないと思いまつw

0

c言語はコンピュータの原理を意識する言語なので高級言語とは言い難い側面があります。 その分自由度が高くOSや制御系のプログラムを書くのに有効な言語です。 コンピュータの原理と言ってもCPUについては共通であって、メモリ構造を意識すると言う事です。 メモリ構造とは値を入れる箱のような物で、その箱が積み上げられていてそれぞれに番地(アドレス)が書かれていると思って下さい。 例として4バイト(メモリ単位)CPUの場合にはメモリは4バイトの箱が積み上がっていると思って下さい。 番地はバイト単位なので$1000番地の箱の下は$1004 とします。 そこでc言語で変数宣言を int i; int *pt; と宣言して変数をアドレス$1000からに割り振ったとすると。 変数iは$1000に割ふられ、ポインタ変数ptは$1004に割り振られます。 このままでは箱の中身は不定です。 i=1; pt=&i; とすると$1000の箱に1が入り$1004の箱には$1000が入ります。 そうすると*ptは何になるかと言うとポインタ変数ptが挿しているint型の変数の中身、ptはiのアドレスなのでiの中身である1となります。

0

ポインタはC言語で新たに作られた概念で、それ以前のCOBOLやFORTRANには存在しませんし、CPUの唯一理解出来る機械語にも存在しない概念ですので、理解出来ない人が多いようです。一応、必要に成った理由を説明します。COBOLやFORTRANは沢山の命令を用意していましたが、C言語では命令の数を減らし関数で提供する方法に改めました、そこで、関数が呼び出し元に極力影響を与えないようにCOBOLやFORTRANで可能であった、引数を関数から変更出来ない仕様に改めました、そのため関数の戻り値の一個のみが呼び出し元にも出せるようになった訳です。標準関数用としては良い判断でしたが、ユーザーが作るユーザー定義関数においては、一個では困る場合が出て来た訳です。そこで、引数をアドレスで渡せば関数から変更出来る仕様を追加しました、アドレスで渡すので、関数内では新たな仕様としで、アドレスを受け取れるポインタを新設した訳です。このように、最近のプログラミング言語は、最初に決めた仕様に問題が有るので、仕様を追加する事で対応する方法が、てんこ盛り状態で、機械語よりも難しくなってしまっており、初心者には理解出来ない事が増えてしまっています。因みに、私自身は、機械語よりも簡単な、関数もポインタも当然存在しないプログラミング言語を作ろうと頑張っています。