合肥建設(shè)網(wǎng)絡(luò)賭博網(wǎng)站網(wǎng)站移動端優(yōu)化工具
(壹) 指針變量
一、指針的概念與定義
二、給指針變量p賦值
三、指針變量的的+、-運(yùn)算
四、無類型指針
五、多重指針
?C++ (壹) 指針變量
小明想把從李華家借來的書——《CCF中學(xué)生計(jì)算機(jī)程序設(shè)計(jì)》還給李華,但李華不在家,于是把書放到書架第3層的最右邊,并寫了一張留言條放在桌上,上面寫著:我還你的書放在書架第3層最右邊。當(dāng)李華回來后,看到這張留言條就知道書在哪了。
這張留言條有什么作用呢?
它就相當(dāng)于一個(gè)指針,上面的內(nèi)容不是書本身,而是書的位置,李華通過留言條(指針)找到了小明還回來的書。
指針針對的是內(nèi)存空間的位置(地址),地址操作符 <--> &
int a=3; 請問如何找到a值為3的地址位置呢?
#include<iostream>
using namespace std;
int main(){int a=3;cout<<&a<<endl;a=4;cout<<&a<<endl;int b=3;cout<<&b<<endl; return 0;
}
- 可以發(fā)現(xiàn),變量a的地址無關(guān)賦值多少!!!
- 不同變量的內(nèi)存空間地址是不一樣的!!!
?
一、指針的概念與定義
指針定義:變量類型 *p; ?--》int *p?= new(int); //申請一個(gè)空間給p,*p內(nèi)容不確定。
int?*p = NULL;
定義了一個(gè)指針變量p,p指向一個(gè)內(nèi)存空間,賦值為NULL也就是0,表示特殊的空地址。
二、給指針變量p賦值
p=&a; ?//把變量a存值的地址給p,注意p是地址,指針*p的值才是3。
?
?煉1.輸入兩個(gè)不同的浮點(diǎn)數(shù),通過指針把最大值+10,并輸出。
#include<iostream>
using namespace std;
int main(){
float a,b,*p;cin>>a>>b;if(a>b){p = &a;}else{p = &b;}*p += 10;cout<<*p<<endl; return 0;
}
?
?三、指針變量的的+、-運(yùn)算
煉2:輸入n個(gè)整數(shù),使用指針變量訪問輸出
#include<iostream>
using namespace std;
int main(){int n,a[100],*p;cin>>n;for(int i=0;i<n;i++){ //輸入 cin>>a[i];} p = &a[0]; //初始賦值 for(int i=0;i<n;i++){cout<<*p<<" "; p++; // p++指的是對地址+sizeof(int) } return 0;
}
假如指針 p = &a[0];
那么請問 *p+3 是什么意思? *(p+3) 呢?
?*p代表值 *p+3代表值+3; *(p+3)?p代表地址 ,p+3?代表地址+3
int a[1000];
p = &a[5];
p++ 相當(dāng) a[6]
練習(xí):*p+3相當(dāng)?a[5]+3 ??;*p-2相當(dāng)?a[5]-2 ??; *(p-2)相當(dāng)?a[3] ???。
四、無類型指針
有時(shí)候我們不確定 指向內(nèi)容的值類型。所以先定義無類型的指針(void *p),根據(jù)后面再強(qiáng)制轉(zhuǎn)換指針類型。
煉3:無指針使用樣例
#include<iostream>
using namespace std;
int a=10;
double b=3.5;
void *p;
int main(){p = &a;cout<< *((int *)p)<<endl;p = &b;cout<< *((double *)p)<<endl;return 0;
}
五、多重指針
有一個(gè)問題,既然指針可以指向其他類型或強(qiáng)制轉(zhuǎn)換,那指針本身就是一種類型,那誰可以指向指針? 當(dāng)然是指針的‘指針’,也就是多重指針!!!
煉4:兩重指針使用樣例。
#include<iostream>
using namespace std;
int a=10, *p;
int **pp;
int main(){p = &a;pp = &p;cout<<a<<"="<<*p<<"="<<**pp<<endl;return 0;
}