swap関数のprintf("変数名naアドレスは%pです。\n", nx);
printf("変数名nbのアドレスは%pです。\n", ny);のnx, nyは、&nx, &nyとしなくていいのですか?同様にswap関数のn1,n2に関しても宜しくお願いします。あと、swap(n1,n2)もどうして&をつけないか教えてください。
#include <stdio.h>
void swap (int *nx, int *ny)
{
int temp = *nx;
printf("変数名naアドレスは%pです。\n", nx);
printf("変数名nbのアドレスは%pです。\n", ny);
*nx =*ny;
*ny = temp;
}
void sort2 (int *n1, int *n2)
{
printf("変数naのアドレスは%pです。\n",n1);
printf("変数nbのアドレスは%pです。\n",n2);
if (*n1 >*n2)
swap (n1, n2);
}
int main(void)
{
int na, nb;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d", &na);
printf("整数B:"); scanf("%d", &nb);
printf("変数naのアドレスは%pです。\n",&na);
printf("変数nbのアドレスは%pです。\n",&nb);
sort2 (&na, &nb);
return (0);
}
No.1
- 回答日時:
printf 関数の%p の指定は引数にポインタを要求するというものです。
>printf("変数名naアドレスは%pです。\n", nx);
のnx は、ポインタですから、そのうえに&を付ける必要はありません。
>swap (n1, n2);
についても
その定義
>void swap (int *nx, int *ny)
でポインタを要求すると言うようになっていますが、
>void sort2 (int *n1, int *n2)
で n1,n2 は、(既に)ポインタとして宣言されていますからそのままで(ポインタだから)良いです。
>printf("変数naのアドレスは%pです。\n",&na);
の場合は、
na は、ポインタではなく、int ですから、アドレスにしてやる必要があります。
No.2ベストアンサー
- 回答日時:
ポインタが良く理解できていないようですね。
ポインタは難しいところですが、覚えると簡単ですのでがんばってください。*をつけたり、&を付けたり、付けなかったり…、一度整理してみるとわかりやすくなります。
■普通のケース
int x;
x ← xの値
&x ← xのアドレス
*x ← こんな書き方はありません。
■ポインタ
int *p;
p ← pのアドレス(ポインタ)
&p ← こんな書き方はありません。
*p ← pの値(ポインタが指している先の値)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
アプリを32bitから64bit移行
-
DLL<->VB間での受け渡し(文字...
-
C言語のポインタに直接アドレス...
-
LPSTR型の初期化について
-
参照型で受け取った引数をポイ...
-
戻り値で構造体を返すことは可...
-
構造体とfscanf
-
fopne で失敗する原因
-
NASMかNASKの文法の本
-
関数ポインタの高速化のメリット
-
自作関数の引数
-
Cで作成したDLL関数をVBから呼...
-
popenした子プロセスのプロセス...
-
#define NULL ((void *)0) の弊害
-
C言語のプログラムをJavaに...
-
visual studioのエラーについて
-
x64プログラムでアドレスが32bi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
連結リスト 要素の入れ替え
-
C言語でのconstを返す関数
-
Cで作成したDLL関数をVBから呼...
-
NULLとブランクの違い
-
エラーの意味
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
-
【C言語】戻り値が構造体の関数
おすすめ情報