|
||||
指針學習不好關鍵是概念不清造成的,說的簡單點就是書沒有認真看,指針的學習猶如人在學習饒口令不多看多學多練是不行的,下面是兩個很經典的例子,很多書上都有,對於學習的重點在於理解*x和x的理解,他們並不相同,*x所表示的其實就是變量a本身,x表示的是變量a在內存中的地址,如果想明白可以輸出觀察cout<<*x"|"x;,當定義了int *x;後對x=&a的理解的問題。仔細閱讀和聯系下面的兩個例子我想指針問題就不是難點了!
#include
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
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的值,而是利用指針進行地址交換達到大小排序的目的. */
#include
main() { 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
{
temp = *p1; /*利用變量temp用於臨時存儲*p1和就是a的值*/
*p1 = *p2; /*將*p1的值也就是a的值換成*p2的值也就是b的值,等價於a=b */
*p2 = temp; /*將*p2的值也就是temp的值等價於b=temp */
} }
/*注意:此題與上題不同的是,直接改變了a於b的值達到真實改變的目的*/