質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

3回答

307閲覧

c言語ポインタについて

fumi6328

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2018/11/27 11:58

###c言語のポインタについて
例えば以下のコードについてですが、ans関数に
参照渡し? ポインタ渡し?(よくわかっていないのでここも教えていただきたいのですが)
をするときに、アドレスをそのまま渡すのとポインタ変数を渡すのではどちらが正しいのですか?
また明確な違いがあり使い分けをしたりするのでしょうか?
今の段階ではint *kaiがポインタ変数になっているのかな?と思ってます。
わかりにくい文章だとは思いますが回答お願いしますm(__)m

C

1#include <stdio.h> 2 3void ans(int *kai) 4{ 5 printf("%d\n",*kai); 6} 7 8int main() 9{ 10 int x = 3; 11 int *p; 12 p = &x; 13 //////////ここ//////////// 14 ans(&x); 15 ans(p); 16 ///////////////////////// 17 return 0; 18}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

文法的にはどちらも正しいです。

変数を増やすと、読む人の負担が増えるので、意味なく変数を増やさない方が良いです。

変数に代入することで、「値に名前を付ける」ということで、一度しか参照しない変数を作る事があります。
つまり変数を増やすことで逆に読む人の負担が減る場合です。
質問の例だと該当しません。

投稿2018/11/27 12:21

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fumi6328

2018/11/27 13:44

理解できました!ありがとうございます
guest

0

アドレスをそのまま渡すのとポインタ変数を渡すのではどちらが正しいのですか?

どちらも同じです。

また明確な違いがあり使い分けをしたりするのでしょうか?

今回の例の場合、いちいちポインタ変数を用意するのは冗長に思えます。
そもそも、ansの仮引数をポインタ型にする必然性がありません。

投稿2018/11/27 12:03

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ポインタを渡すのは、復帰値以外の結果を受け取るためが多いのですが、構造体など容量が大きいデータをそのまま渡すと処理時間(大したことないですがw)が長くなるような場合です。(スタック消費の問題も有ります)・・・その場合はconst修飾したりします。
今回の例で行くとアドレス(ポインタ)を渡すことに意味が無いように思います。・・・ポインタ渡しの方がスタックの消費は大きい(通常はポインタ:8バイト、int4バイト)
「追記」

参照渡し? ポインタ渡し?

参照渡しはC++で導入された考えですが、ポインタ渡しと同じです。
参考:値渡し、ポインタ渡し、参照渡しを使い分けよう

投稿2018/11/27 12:18

編集2018/11/27 12:25
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問