ここから本文です

int型の*pとint *型のpの違いはなんですか?

fri********さん

2014/4/811:02:54

int型の*pとint *型のpの違いはなんですか?

補足#include <stdio.h>
int main(void)
{
int nx = 10;
int *px = &nx;
printf("nxの値=%d\n", nx);
printf("*pxの値=%d\n", *px);

閲覧数:
2,138
回答数:
5

違反報告

ベストアンサーに選ばれた回答

mei********さん

編集あり2014/4/1009:22:57

「int型の*pとint *型のpの違いは」
いずれも、単独では、ポインタの宣言です。
言語Cでは、int *p
言語C++では、int* p
の形で使われます。

但し、この「補足」の場合は、別の使い方です。
このスクリプトを実行してみましょう。
*pxは、nxの別名として働きます。
このときの「*」は、間接演算子と呼ばれます。
*px=*(&nx)=(*&)nx=nxと置き換えてみましょう。
&と*は互いに逆の機能を持つ演算子と解釈されます。

追記
ポインタの説明は難しいですね。
ポインタ=ポインタ変数と云う定義が一般的の様に思います。
アドレス=ポインタというのは、辻褄合わせの表現のように見えます。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

b_f********さん

2014/4/1015:45:22

意味としてはすでに出ている通り等価です。

後は可読性と好みの問題ですね。

個人的には、
int* p;
としたほうが、「intポインタ型の変数のp」と読みやすい(*はあくまで型の一部)ので、こう書く方が解りやすいと思っています。

補足分についてはほかの方の回答に任せます。

プロフィール画像

カテゴリマスター

qui********さん

2014/4/908:23:30

質問の意図がよくわかりませんが、

宣言の場合には、
int *p;

int* p;
は等価です。
もちろん、
int * p;
でも。Cはそうですし、C++はそれをそのまま引き継いでいますので、Cだから、C++だから、ではありません。

int *p;
において、
pはintへのポインタ型の変数、
参照演算子*をつければ
*pは(pで指される)int型の値 (変数とは限らない)になります。

'*'について、ポインタの宣言時と参照時での意味の違いが混乱しやすい、という批判は昔からあります...

int val;
について
*valはありません。
アドレス演算子&をつければ
&valは、valへのポインタ(int型へのポインタ)が得られます。

int *px = &nx;
では、int型へのポインタpxを宣言してから、int型の変数nxへのポインタを&演算子で求めて、その値をpxに初期化として設定します。なので、*pxはnxそのものということになります。

nao********さん

2014/4/907:50:05

*px = &nx;
というのは *pxと nxは同じものを指してるので
どちらでも10と表示されます。

k03********さん

編集あり2014/4/811:59:56

friendlystarsjun2さん


1.
int nx = 10;
int *px = &nx;
初期化は便利だが、

はじめは、分離したほうが、誤解が少ない。
2.
int nx;
int *px;
nx=10;
px=&nx;

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる