C++指針(我所瞭解的)

不知何緣由,最近總是靜不下心來學習,也不知什麼緣由,忽然之間,就很想學一下C/C++(我想:"在我頗有興趣去學習一個東西時候,這不是一件壞事吧",不過我仍是以Java爲主),由於很早以前,在我尚未接觸過Java時,那時,我對選擇學習Java仍是C/C++有一個,有一個什麼呢?就是學那個好,那時,Java至關的流行,而C/C++又比較難學,特別是C++中的指針,不少人說,至關的複雜,因此我最終選擇自學Java.
   這兩天,學了指針,感受並非像傳說的觸不可及(可是它確實有點撓,由於指針嗎,常常對一個變量指來指去),我以爲,這要規功於我學習了Java,理解了面向對象的含義,若是你理解了什麼是對象,如何運用,並瞭解了引用傳遞,我認爲學習指針,不是難事(若是我說的不對,不要見笑),由於對象也是存在內存的地址中,而引用傳遞,始終是指向那個內存地址。
 

   上個人第一個C++程序(在這裏要先感謝,賀老師無私的奉獻知識
ios

#include <iostream>編程

using namespace std;

int mainyw();
數組

int main()函數

{學習

cout  << "指針運算 "  << endl;spa

int a, b;指針

int *pointer_1, *pointer_2;  //指向整形變量的指針變量對象

pointer_1 = &a;  //取a變量的地址內存

        pointer_2 = &b;ci

*pointer_1 = 100;

*pointer_2 = 10;

cout << a << " " << b << endl;

cout << *pointer_1 << " " << *pointer_2 << endl;
        mainyw(); 

return 0;

} 


int mainyw()

{

int a, b, *p1, *p2, *p;

cin >> a >> b;

p1 = &a;

p2 = &b;

if (a<b)

{

p = p1; p1 = p2; p2 = p;

}

cout << "a=" << a << " b=" << b << endl;

cout << "max=" << *p1 << " min=" << *p2 << endl;

return 0;

}


在mian方法中pointer_1 取了a變量的地址,而後,pointer_1指針賦值爲100,這時pointer_1指向的地址就是a變量指向的地址,因此,
輸出的結果a=100,b=10, 
pointer_1 =100,pointer_2 =10.


儘管ab沒有再賦值,但數據發生變化,緣由就地址的做用,因此若是a修改成90,指針變量pointer_1 也是90

#include <iostream>

using namespace std;

int main()

{

cout  << "指針運算 "  << endl;

int a, b;

int *pointer_1, *pointer_2;  //指向整形變量的指針變量

pointer_1 = &a;  //取a變量的地址

pointer_2 = &b;

*pointer_1 = 100;

*pointer_2 = 10;

cout << a << " " << b << endl;

cout << *pointer_1 << " " << *pointer_2 << endl;

cout  << "修改a變量 "  << endl;

a=90;

cout << a << " " << b << endl;

cout << *pointer_1 << " " << *pointer_2 << endl;

return 0;

}


咱們知道,一個函數最多就是返回一個值(數,數組或集合,對象),而如今的myswap函數能夠改變傳入的兩個數的內存地址,
把兩個數的內存地址互換,就是a變成b,b變成a,這是否是至關於返回了多個數的效果呢? 

#include <iostream>

using namespace std;
 

void myswap(int *p1, int *p2)

{

int t;

t=*p1;

*p1=*p2;  //這裏把地址進行互換

*p2=t;

}

int main()

{

int *point1,*point2,a,b;

cout  << "輸入兩個數,比較大小 "  << endl;

cin>>a>>b;

cout<<"a="<<a<<",b="<<b<<endl;

point1=&a;

point2=&b;

if (a<b){

             myswap(point1, point2);

}

cout<<"a="<<a<<",b="<<b<<endl;

    cout<<*point1<<","<<*point2<<endl;

}

我最初輸入的是2,5,a=2,b=5;myswap函數中把兩個數的地址進行互換,這時,指針發生了變化,假如a的地址是x000xf,b的地址是x004xf,
point1 指針原來指向是地址x000xf,如今,是指向了x004xf,而point2指向了x000xf,相應的a.b的值也發生了變化,由於地址改變了,因此,指針傳遞給myswap的形參,就是引用傳遞。
可見,指針也是一種多少奇妙的事物,它會讓你編程世界多一份意外的風景(若是你運用好的話)

相關文章
相關標籤/搜索