合肥建設網(wǎng)絡賭博網(wǎng)站網(wǎng)站移動端優(yōu)化工具
(壹) 指針變量
一、指針的概念與定義
二、給指針變量p賦值
三、指針變量的的+、-運算
四、無類型指針
五、多重指針
?C++ (壹) 指針變量
小明想把從李華家借來的書——《CCF中學生計算機程序設計》還給李華,但李華不在家,于是把書放到書架第3層的最右邊,并寫了一張留言條放在桌上,上面寫著:我還你的書放在書架第3層最右邊。當李華回來后,看到這張留言條就知道書在哪了。
這張留言條有什么作用呢?
它就相當于一個指針,上面的內容不是書本身,而是書的位置,李華通過留言條(指針)找到了小明還回來的書。
指針針對的是內存空間的位置(地址),地址操作符 <--> &
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的地址無關賦值多少!!!
- 不同變量的內存空間地址是不一樣的!!!
?
一、指針的概念與定義
指針定義:變量類型 *p; ?--》int *p?= new(int); //申請一個空間給p,*p內容不確定。
int?*p = NULL;
定義了一個指針變量p,p指向一個內存空間,賦值為NULL也就是0,表示特殊的空地址。
二、給指針變量p賦值
p=&a; ?//把變量a存值的地址給p,注意p是地址,指針*p的值才是3。
?
?煉1.輸入兩個不同的浮點數(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;
}
?
?三、指針變量的的+、-運算
煉2:輸入n個整數(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++ 相當 a[6]
練習:*p+3相當?a[5]+3 ??;*p-2相當?a[5]-2 ??; *(p-2)相當?a[3] ???。
四、無類型指針
有時候我們不確定 指向內容的值類型。所以先定義無類型的指針(void *p),根據(jù)后面再強制轉換指針類型。
煉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;
}
五、多重指針
有一個問題,既然指針可以指向其他類型或強制轉換,那指針本身就是一種類型,那誰可以指向指針? 當然是指針的‘指針’,也就是多重指針!!!
煉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;
}