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

#include < stdio.h >


main()
{
int a,b; // 定義a,b兩個整形變量用于輸入兩個整數
int * point_1, * point_2, * temp_point; // 定義三個指針變量
scanf( " %d,%d " , & a, & b); // 格式化輸入a,b的值 */
point_1 =& a; // 把指針變量point_1的值指向變量a的位址 */
point_2 =& b; // 把指針變量point_2的值指向變量b的位址 */
if (a < b)
temp_point = point_1; // 這裡的temp_point是用于臨時存儲point_1的值也就是變量a的位址的 */
point_1 = point_2; // 把point_2的值賦予point_1 */
point_2 = temp_point;
// 由于point_1的值已經改變無法找到,利用前面臨時存儲的也就是temp_point找回原point_1的值賦予point_2,打到把point_1和point_2值對換的目的*/
}
printf( " %d,%d " , * point_1, * point_2); // 利用*point_1和*point_2也就是分辨指向b和a的方法把值顯示自愛螢幕上 */


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

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

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




int a,b; /* 定義a,b兩個整形變量用于輸入兩個整數 */
int * point_1, * point_2; /* 定義三個指針變量 */
scanf( " %d,%d " , & a, & b); /* 格式化輸入a,b的值 */
point_1 = & a; /* 把指針變量point_1的值指向變量a的位址 */
point_2 = & b; /* 把指針變量point_2的值指向變量b的位址 */
compositor(point_1,point_2); /* 調用自定義的排序涵數,把a,b的位址傳遞給point_1和point_2 */
printf( " %d,%d " ,a,b); /* 列印出a,b的值 */
}


static compositor(p1,p2)
int * p1, * p2; /* 定義形式參數p1,p2為指針變量 */
int temp; /* 建立臨時存儲變量 */
if ( * p1 <* p2) /* 如果*p1<p2,注意這裡的*p1和*p2其實就是a和b */
{
temp = * p1; /* 利用變量temp用于臨時存儲*p1和就是a的值 */
* p1 = * p2; /* 将*p1的值也就是a的值換成*p2的值也就是b的值,等價于a=b */
* p2 = temp; /* 将*p2的值也就是temp的值等價于b=temp */
}

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