不知何緣由,最近總是靜不下心來學習,也不知什麼緣由,忽然之間,就很想學一下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的形參,就是引用傳遞。
可見,指針也是一種多少奇妙的事物,它會讓你編程世界多一份意外的風景(若是你運用好的話)