1. 程式人生 > >利用指標把三個數從大到小輸出(容易出現的問題)

利用指標把三個數從大到小輸出(容易出現的問題)

一個程式設計師的誕生!
下面的第一個程式是正確的做法
第二個是錯誤的做法

#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為推出除錯,點選選單欄裡的除錯\視窗\監視,將各個變數,地址進行監視。