c/c++中指針學(xué)習(xí)的兩個(gè)絕好例子

字號(hào):


    對(duì)于眾多人提出的c/c++中指針難學(xué)的問(wèn)題做個(gè)總結(jié):
    指針學(xué)習(xí)不好關(guān)鍵是概念不清造成的,說(shuō)的簡(jiǎn)單點(diǎn)就是書沒(méi)有認(rèn)真看,指針的學(xué)習(xí)猶如人在學(xué)習(xí)饒口令不多看多學(xué)多練是不行的,下面是兩個(gè)很經(jīng)典的例子,很多書上都有,對(duì)于學(xué)習(xí)的重點(diǎn)在于理解*x和x的理解,他們并不相同,*x所表示的其實(shí)就是變量a本身,x表示的是變量a在內(nèi)存中的地址,如果想明白可以輸出觀察cout<<*x"|"x;,當(dāng)定義了int *x;后對(duì)x=&a的理解的問(wèn)題。仔細(xì)閱讀和聯(lián)系下面的兩個(gè)例子我想指針問(wèn)題就不是難點(diǎn)了!
    程序代碼#include
    main()
    {
    int a,b; /* 定義a,b兩個(gè)整形變量用于輸入兩個(gè)整數(shù) */
    int *point_1,*point_2,*temp_point; /* 定義三個(gè)指針變量 */
    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是用于臨時(shí)存儲(chǔ)point_1的值也就是變量a的地址的 */
     point_1=point_2; /* 把point_2的值賦予point_1 */
     point_2=temp_point;
     /* 由于point_1的值已經(jīng)改變無(wú)法找到,利用前面臨時(shí)存儲(chǔ)的也就是temp_point找回原point_1的值賦予point_2,打到把point_1和point_2值對(duì)換的目的*/
    }
    printf("%d,%d",*point_1,*point_2); /* 利用*point_1和*point_2也就是分辨指向b和a的方法把值顯示自愛(ài)屏幕上 */
    }
    /* 此題需要注意和了解是的此法并沒(méi)有改變變量a,b的值只是利用指針變量分別存儲(chǔ)a和b的地址,然后再把那兩個(gè)指針變量的值對(duì)換一下其實(shí)就是存儲(chǔ)在
    指針變量里面a與b的地址對(duì)換,在利用*point_1和*point_2的方式把調(diào)換后的值顯示出來(lái)這里的*point_1實(shí)際就是a,此中算法并非真的改變a,b的值,而是
    利用指針進(jìn)行地址交換達(dá)到大小排序的目的.
    */