對于眾多人提出的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的值,而是??
//
利用指針進行地址交換達到大小排序的目的.??
?
#include?
<
stdio.h
>
??
??
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<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的值達到真實改變的目的?
*/