利用指標把三個數從大到小輸出(容易出現的問題)
阿新 • • 發佈:2019-02-11
一個程式設計師的誕生!
下面的第一個程式是正確的做法
第二個是錯誤的做法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void swap(int *p1, int *p2);
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d",&a,&b,&c);
printf("a=%d b=%d c=%d\n",a,b,c);
if(a<b)
swap(&a,&b);
if (a<c)
swap(&a,&c);
if(b<c)
swap(&b,&c);
printf("a=%d b=%d c=%d\n",a,b,c);
return 0;
}
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//程式沒有交換a,b的值,只是把實
//參a,b的值賦給了形參p1,p2。
//swap函式只是交換了形參p1,p2的值,
//但是形參p1,p2的值並不能返回給實參
//實參a,b和形參p1,p2都有單獨的地址。
//#include <stdio.h>
//void swap(int p1, int p2);
//
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
// scanf("%d%d%d",&a,&b,&c);
// printf("a=%d b=%d c=%d\n",a,b,c);
// if(a<b)
// swap(a,b);
// if(a<c)
// a,b
// swap(a,c);
// if(b<c)
// swap(b,c);
// printf("a=%d b=%d c=%d\n" ,a,b,c);
// return 0;
//}
//void swap(int p1, int p2)
//{
// int temp;
// temp = p1;
// p1 = p2;
// p2 = temp;
//}
圖片中詳細的說明了各個變數值的變換情況和地址值
在圖中除錯的過程中,F10進行除錯,F11進入子函式除錯,F7進入子函式,Alt+F5為推出除錯,點選選單欄裡的除錯\視窗\監視,將各個變數,地址進行監視。