天天看點

c/c++中指針學習的兩個絕好例子

對于衆多人提出的c/c++中指針難學的問題做個總結: 

指針學習不好關鍵是概念不清造成的,說的簡單點就是書沒有認真看,指針的學習猶如人在學習饒密碼不多看多學多練是不行的,下面是兩個很經典的例子,很多書上都有,對于學習的重點在于了解*x和x的了解,他們并不相同,*x所表示的其實就是變量a本身,x表示的是變量a在記憶體中的位址,如果想明白可以輸出觀察cout<<*x"|"x;,當定義了int *x;後對x=&a的了解的問題。仔細閱讀和聯系下面的兩個例子我想指針問題就不是難點了!

c/c++中指針學習的兩個絕好例子

 #include  < stdio.h >   

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

main()  

c/c++中指針學習的兩個絕好例子

 {  

c/c++中指針學習的兩個絕好例子

 int  a,b;  //  定義a,b兩個整形變量用于輸入兩個整數   

c/c++中指針學習的兩個絕好例子

 int   * point_1, * point_2, * temp_point;  //  定義三個指針變量   

c/c++中指針學習的兩個絕好例子

 scanf( " %d,%d " , & a, & b);  //  格式化輸入a,b的值 */  

c/c++中指針學習的兩個絕好例子

 point_1 =& a;  //  把指針變量point_1的值指向變量a的位址 */  

c/c++中指針學習的兩個絕好例子

 point_2 =& b;  //  把指針變量point_2的值指向變量b的位址 */  

c/c++中指針學習的兩個絕好例子

 if  (a < b)  

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

    temp_point = point_1;  //  這裡的temp_point是用于臨時存儲point_1的值也就是變量a的位址的 */  

c/c++中指針學習的兩個絕好例子

     point_1 = point_2;  //  把point_2的值賦予point_1 */  

c/c++中指針學習的兩個絕好例子

     point_2 = temp_point;  

c/c++中指針學習的兩個絕好例子

    //  由于point_1的值已經改變無法找到,利用前面臨時存儲的也就是temp_point找回原point_1的值賦予point_2,打到把point_1和point_2值對換的目的*/  

c/c++中指針學習的兩個絕好例子

 }   

c/c++中指針學習的兩個絕好例子

printf( " %d,%d " , * point_1, * point_2);  //  利用*point_1和*point_2也就是分辨指向b和a的方法把值顯示自愛螢幕上 */  

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

 //  此題需要注意和了解是的此法并沒有改變變量a,b的值隻是利用指針變量分别存儲a和b的位址,然後再把那兩個指針變量的值對換一下其實就是存儲在  

c/c++中指針學習的兩個絕好例子

 // 指針變量裡面a與b的位址對換,在利用*point_1和*point_2的方式把調換後的值顯示出來這裡的*point_1實際就是a,此中算法并非真的改變a,b的值,而是  

c/c++中指針學習的兩個絕好例子

 // 利用指針進行位址交換達到大小排序的目的.   

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

 int  a,b;  /*  定義a,b兩個整形變量用于輸入兩個整數  */  

c/c++中指針學習的兩個絕好例子

 int   * point_1, * point_2;  /*  定義三個指針變量  */  

c/c++中指針學習的兩個絕好例子

scanf( " %d,%d " , & a, & b);  /*  格式化輸入a,b的值  */  

c/c++中指針學習的兩個絕好例子

point_1  =   & a;  /*  把指針變量point_1的值指向變量a的位址  */  

c/c++中指針學習的兩個絕好例子

point_2  =   & b;  /*  把指針變量point_2的值指向變量b的位址  */  

c/c++中指針學習的兩個絕好例子

compositor(point_1,point_2);  /*  調用自定義的排序涵數,把a,b的位址傳遞給point_1和point_2  */  

c/c++中指針學習的兩個絕好例子

printf( " %d,%d " ,a,b);  /*  列印出a,b的值  */  

c/c++中指針學習的兩個絕好例子

}   

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

 static  compositor(p1,p2)  

c/c++中指針學習的兩個絕好例子

 int   * p1, * p2;  /*  定義形式參數p1,p2為指針變量  */  

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

 int  temp;  /*  建立臨時存儲變量  */  

c/c++中指針學習的兩個絕好例子

     if  ( * p1 <* p2)  /*  如果*p1<p2,注意這裡的*p1和*p2其實就是a和b  */  

c/c++中指針學習的兩個絕好例子

     {  

c/c++中指針學習的兩個絕好例子

        temp  =   * p1;  /*  利用變量temp用于臨時存儲*p1和就是a的值  */  

c/c++中指針學習的兩個絕好例子

         * p1  =   * p2;  /*  将*p1的值也就是a的值換成*p2的值也就是b的值,等價于a=b  */  

c/c++中指針學習的兩個絕好例子

         * p2  =  temp;  /*  将*p2的值也就是temp的值等價于b=temp  */  

c/c++中指針學習的兩個絕好例子

    }   

c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子
c/c++中指針學習的兩個絕好例子

 /*  注意:此題與上題不同的是,直接改變了a于b的值達到真實改變的目的  */

繼續閱讀