検索結果 11 件

by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に配列のアドレスを渡すという考え
返信数: 13
閲覧数: 5065

Re: 関数に配列のアドレスを渡すという考え

ご説明ありがとうございます >a の型は、int [6]。すなわち、int の配列(要素数 6)。 テキストではintの部分のみを型と教えていますが、要素数の部分も型と言えばそうかもしれませんね printf(" a+1: %p\n", a + 1); // a + 1 は、&a[1] printf(" &a+1: %p\n", &a + 1); // &a + 1 は、&a[6] の次のアドレス これの結果が違うところがミソのようですね >&a の値は、配列 a 全体のアドレスで、a[0] のアドレスと同じになります。 配列全体ですので、次を指定すると、次のアドレスではなくて配列の外のアドレ...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に配列のアドレスを渡すという考え
返信数: 13
閲覧数: 5065

Re: 関数に配列のアドレスを渡すという考え

私、本が説明不足と不満を書いてしまいましたが、その後、10ページほど読み進めると a[5] = 10 ; コンパイラはこのような行をみつけると *(a+5) = 10 ; 内部的にこのように置き換える と書いてありました。初学者にとって難しいのは、読み進める前に頭がごちゃごちゃして嫌になってしまうことですね。甘えを言わせてもらえば、スムーズにつなげられるように してもらえると良いですが、私の間違いは間違いとして訂正いたします。 結局のところa[5]のaには配列aの先頭アドレス、例えば642296が代入されるのでa[5] も 5[a]もpc的には アドレス(a+5) とアドレス(5+a)の中身を...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に配列のアドレスを渡すという考え
返信数: 13
閲覧数: 5065

Re: 関数に配列のアドレスを渡すという考え

http://kmaebashi.com/programmer/pointer.html void func(int *a){}とvoid func(int a[]){} は全く同一である。引数 a は、配列に見えるが、実は単なるポインタの 宣言である(a++などの操作も可能である)。要素数は書いても無視されるので、 a[] と書いても、a[10] と書いても、a[100]と書いても全く同一の意味となる。 Cの文法中で、配列の「宣言」がポインタに読み換えられるのは、 唯一このケースだけである。つまり、int *a と int a[] が同一の意味となるのは、 「関数の仮引数」という限られたケー...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: 関数に配列のアドレスを渡すという考え
返信数: 13
閲覧数: 5065

関数に配列のアドレスを渡すという考え

#include <stdio.h> void func(int arg[]) ; //プロトタイプ宣言 int main() { int a[] = //配列の宣言 { 0, 1, 2, 3, 4 //初期化している } ; int count ; for (count = 0 ; count < 5 ; count ++) { //配列の中身を画面に出力 printf("%d ", a[count]) ; } printf("\n") ; //たんに改行している func(a) ; //関数に配列を渡している for (count = 0 ; count < 5 ; count ++) ...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタ変数
返信数: 14
閲覧数: 30351

Re: ポインタ変数

int a = 10 ; int *p ; //ポインタ変数の宣言 p = &a ; // aの「場所」を代入している printf("pの値は:%d\n", p) ; にすると普通にアドレスらしき数字6433212が表示されますが これをint pに変えた時点でエラーになります int a = 10 ; int *p ; //ポインタ変数の宣言 p = &a ; // aの「場所」を代入している このプログラムだけでもアセンブリ出来るのに対し int pに変えただけでエラーとなりますので、やはり p = &a の時点ではねられている、エラーになっているとみるべきですね。pをint型変数を入れ...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタ変数
返信数: 14
閲覧数: 30351

Re: ポインタ変数

ただちょっと疑問がありまして、int型変数のアドレスもintに内包されるので
int p
として
p = &a
でaの場所を代入
printf("*pの値は:%d\n", *p) ;
ここでpの値をアドレスと解釈してその中身を見ろと
指令出来ないものですかね
実際これでやるとエラーと出るのでpをint型変数のアドレスだと事前に指定しないと、pにいくらint型変数の正しいアドレスを入れても、コンピューターはアドレスとして解釈してくれないし、その中身も見てくれないということでしょうか?
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタ変数
返信数: 14
閲覧数: 30351

Re: ポインタ変数

ぴえろう様 >int *p; の意味ですが、「int *」という型の「p」という変数を作っているのです。 「int *」は、「int型変数のアドレスを入れる型」ということです。 ------ 非常に丁寧に書かれているテキストではありますが、このような誤解をさける説明がないので驚いています。ここで質問しておいて良かったです。 テキストではintと*の間を入れてますので、余計に*pでひと固まりだと誤解してしまいます。ちなみにint* pでも正常に作動しましたが、これはコンピュータが補正して読み込んでるのか、どちらでも正しいのかどっちなんでしょうかね よそさまのページによりますた変数が2つ以上だと、...
by wrsvrsk
5年前
フォーラム: C言語何でも質問掲示板
トピック: ポインタ変数
返信数: 14
閲覧数: 30351

ポインタ変数

出典はC言語 はじめてのプログラミングという本のプログラムです このような本を読んでいますので、超初心者となります それではよろしくお願いします //ポインタを利用した簡単なプログラム #include <stdio.h> int main() { int a = 10 ; int *p ; //ポインタ変数の宣言 p = &a ; // aの「場所」を代入している printf("aの値は:%d\n", a) ; printf("*pの値は:%d\n", *p) ; *p -=3 ; printf("aの値は:%d\n", a) ; printf("*pの値は:%d\n", *p) ; } ...
by wrsvrsk
6年前
フォーラム: C言語何でも質問掲示板
トピック: ブロック文(複文)について
返信数: 4
閲覧数: 3509

Re: ブロック文(複文)について

確かに、私の理解力の問題や、本という媒体の性質上、難しいところがあるのは痛感しています

解決という表示はずっと気になっているのですが、解決しましたと明記するだけでよろしいのでしょうか?
フォーラムルールを読んでもボタンを押せとかそういうことが書いてなくて。他の例をみると解決した、と明記しなくても
解決と表示してるのもあるので、間違ってたら大変すみません。
ブロック文の用法についての疑問は解消しました。問題は解決しました。
by wrsvrsk
6年前
フォーラム: C言語何でも質問掲示板
トピック: ブロック文(複文)について
返信数: 4
閲覧数: 3509

Re: ブロック文(複文)について

>if や else は、条件を満たすと直後の処理が1つだけ実行されると考えてください。 なるほど、{ }を使うと2文を1つにまとめる、2つで1つの処理を行ったと考えるわけですね >1つめの if の例では、{ } をなくしてしまうと、printf だけが直後の処理になり、 score = 100; は、if の条件に関わらず必ず実行されてしまいます。 この例は非常に分かりやすいですね >2つめの if-else の例では、ブロックの中身が1行だけなので、 { } をなくしても、同じ処理が実行されます。 テキストでブロック文を使うと書いてありますけど、ここでの目的は複数文を1つにまとめる とい...
by wrsvrsk
6年前
フォーラム: C言語何でも質問掲示板
トピック: ブロック文(複文)について
返信数: 4
閲覧数: 3509

ブロック文(複文)について

苦しんで覚えるC言語の https://9cguide.appspot.com/07-03.html 7章:比較と判断 3. 複数の処理の実行 より引用 if (score > 100) { printf("入力が 100 より大きいので修正します。\n"); score = 100; } printf("点数は %d 点です。\n",score); 引用終わり 最初はブロック文のイメージがしにくかったのですが、変数スコアが100より 大きい場合、 "入力が 100 より大きいので修正します と表示して score=100 scoreを100に修正する、 (条件を1回限り示してその条件に対する...

詳細検索ページへ移動する