ポインタの概念そのものに関する勉強中なのですね。
そうですね。両者は同じ行動ですが、次のように全く同様に比較した方が良いでしょうね。
(1)
int *p, q;
p = &q;
q = 100;
printf("%d", *p);
(2)
int *p, q;
p = &q;
*p = 100;
printf("%d", q);
まぁ、同じですね。
>scanfを使って、5つぐらい値を代入させて、
とりあえず、例えば、
void foo (int a, int b, int c, int d, int e) {
// a,b,c,d,eにscanfで値を代入する
}
という具合に5つほど、入力された値を変数に代入するということであれば、
void foo(int *a, int *b int *c int *d int *e) {
// a,b,c,d,e は格納先を指すポインタ(のはず)である。scanfに&はいらない。
scanf ("%d%d%d%d%d",a,b,c,d,e);
}
int main(void) {
int v1,v2,v3,v4,v5;
foo(&v1,&v2,&v3,&v4,&v5);
}
と「ポインタ」を使用するか
void foo(int &a, int &b, int&c, int &d, int &e) {
// a,b,c,d,e は参照である。scanfに&が必要。
// scanf ("%d%d%d%d%d",&a,&b,&c,&d,&e);
}
int main(void) {
int v1,v2,v3,v4,v5;
foo(v1,v2,v3,v4,v5);
}
と「参照」(アドレス演算子ではないので注意を!)を使用するか
です。
参照を使用したほうが「高速」で、「無駄なメモリも必要ない」ですが、
呼び出し側で「値渡し」との区別がつかない(値を渡すだけか、値が中で変えられてしまうのかは、作った本人以外は使ってみないとわからない)という弱点はあります。
それを補うためには、setValuesOf(...)などというように、値が変更されると言うことが明示的にわかる関数名としておきましょう。
お礼
haporunさん、ごめんなさい。 補足の所に書いてしまいました。 >コピーにかかる時間はいっしょです。 ほとんどいっしょですか。 なんとなく解ってきました。 もっと勉強してきます。 ありがとうございました。
補足
haporunさんレスありがとうございます。 ただただポインタを使ってみたかった? そうなんです。ポインタを理解したいだけです。 はじめに書きましたが、scanfで値を入力させて他の関数でその値を使いたいのですが、 retutnで返せるのは、一つだけらしいので、ポインタを使おうと思いました。 また、グローバル変数にすれば簡単ですが・・・。 もちろん、今やろうとしていることも、 別にmain関数だけでかけますが、ポインタを理解するためにやっています。 これは、独習Cから抜粋しただけです。 レポートではありません。独学なので。 よろしくお願いします。