by Welly
pointer:就是電腦把這個東東儲存在一個地方,而這個地方的地址就是所謂的指標~
-->
而他的地址會用一個十六進位制的數字存起來,所以才會看不懂歐~
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<&a;
return 0;
}
//0x61fe1c用法:在要求地址的變數前面加上'&'J個符號:D
-->
J個東東叫做取址符,在變數前面加這個就可以拿到他的地址了!(等於跟電腦說我要這個東東的地址)
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<&a;
return 0;
}
//0x61fe1c
//再看一次有看懂嗎?pointer variable:就是拿來存指標(位置(就是剛剛那個!))的變數歐~
-->
又叫做存址型態~
像整數變數是拿來存整數的,浮點數變數是拿來存浮點數的,而指標變數就是拿來存指標的:D
#include <iostream>
using namespace std;
int main()
{
int a;
int* p;
p=&a;
cout<<p;
return 0;
}
//0x61fe14記得加星星就歐凱!
長醬歐:
欲求變數指標的型態+'*'+變數名稱
(在供蝦餃!!!)
-->
看栗子解釋~
#include <iostream>
using namespace std;
int main()
{
int a;
int* p;
p=&a;
cout<<p;
return 0;
}
//0x61fe14用法:在要求值的指標變數前面加上'*'J個符號
-->
J個東東叫做取值符,在指標變數前面加這個就可以拿到裡面存的東東!(等於跟電腦說我要這個地址裡的東東)
#include <iostream>
using namespace std;
int main()
{
int a=2;
int* p;
p=&a;
cout<<*p;
return 0;
}
//2
#include <iostream>
using namespace std;
int main()
{
int a=2;
int* p;
p=&a;
cout<<&a<<endl;
cout<<a<<endl;
cout<<*a<<endl;
cout<<p<<endl;
cout<<*p<<endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a=2;
int* p;
p=&a;
cout<<&a<<endl;
cout<<a<<endl;
cout<<*a<<endl;
cout<<p<<endl;
cout<<*p<<endl;
return 0;
}
//0x61fe14
//2
//compiler error
//0x61fe14
//2輸入格式:
首先會有一個整數n,代表有幾次操作
接下來會有n個數字,代表每一次操作的種類
1代表交換左邊和中間的杯子
2代表交換左邊和右邊的杯子
3代表交換中間和右邊的杯子
輸出格式:
輸出「左邊」、「中間」或「右邊」,代表球最後會在哪一個杯子裡面
例如:
輸入「5 3 2 1 2 3」,會輸出「右邊」
輸入「6 2 3 1 1 3 1」,會輸出「左邊」
輸入「7 1 1 1 3 2 2 1」,會輸出「中間」
一開始魔術師有三個杯子,球在中間那個杯子裡面,接著會有n次交換的動作,請你找出最後球在哪個杯子
**要求:要用函式寫歐!!!**
#include <iostream>
using namespace std;
void exchange(int a,int b){
int tem=a;
a=b;
b=tem;
}
int main(){
int r,m,l;
m=1;
int time;
int now,tem;
cin>>time;
for(int i=0;i<time;i++){
cin>>now;
if(now==1){
exchange(l,m);
}
else if(now==2){
exchange(l,r);
}
else if(now==3){
exchange(r,m);
}
}
if(r==1){
cout<<"右邊";
}
else if(l==1){
cout<<"左邊";
}
else if(m==1){
cout<<"中間";
}
return 0;
}
在程式的任何地方都能用
只有在特定的區域內可以用
ex.迴圈、函式等等
&
special thanks:翠憶學長大凱瑞
第一天:小華叫小明用單身十六年的手速自己抄在習作上
回家以後小明看到習作上的題目就想在習作上面畫畫
->
先複製再把"值"傳入 並且不會更改到原本的值 就像小明先把答案抄到自己的習作一樣 他後來在上面畫畫並不會更改到小華的習作簿
#include<iostream>
using namespace std;
void exchange(int A, int B) {
int tmp = A;
A = B;
B = tmp;
cout << A << " " << B << endl; //2 1
}
int main(){
int a = 1, b = 2;
exchange(a, b);
cout << a << " " << b; //1 2
return 0;
}第二天:小智直接把自己的習作借給小明(天阿真是個好人)回家以後小明看到習作上的題目又想在習作上面畫畫
->直接把"地址"傳入 因此會更改到原本的值 就像小智直接把習作給小明一樣 他後來在上面畫畫會更改到小智的習作簿
#include<iostream>
using namespace std;
void exchange(int *A, int *B) { //A, B 是 a, b的記憶體位址 //指標變數(存址型態)
int tmp = *A; //取A記憶體位址的值,也就是a的值 //取值A
*A = *B; //把A記憶體位址的值(a),改成B記憶體位址的值(b) //取值A,B
*B = tmp; //把B記憶體位址的值(b),改成tmp //取值B
cout << *A << " " << *B << endl; //2 1 //取值A,B
}
int main(){
int a = 1, b = 2;
exchange(&a, &b); //傳入a, b的記憶體位址 //取址a,b
cout << a << " " << b; //2 1
return 0;
}簡單來說有點像是幫變數娶小明取小名的感覺
用法:
欲取參考的變數型態+'&'+他的小名
(你說得很清楚我聽得很模糊阿阿)
-->
看栗子~
**指標也可以歐~~~:D**
#include <iostream>
using namespace std;
int main(){
int a=2;
int *p=&a;
int &r=a;
int *&rp=p;
return 0;
}
#include <iostream>
using namespace std;
int main(){
int a=2;
int b=7;
int *p=&a;
int &r=a;
int *&rp=p;
r=3;
cout<<r<<endl;//3
cout<<a<<endl;//3
cout<<p<<endl;//0x61fe0c
rp=&b;
cout<<rp<<endl;//0x61fe08
cout<<p<<endl;//0x61fe08
return 0;
}
既然傳入的是參考,就等於是直接把a跟b傳進去ㄌ~所以應該可以推論出醬可以直接更改到他的值八~
->所以是會更改到原本的值的歐~
#include<iostream>
using namespace std;
void exchange(int &A, int &B) {
int tmp = A;
A = B;
B = tmp;
cout << A << " " << B <<endl;
}
int main(){
int a = 1, b = 2;
exchange(a, b);
cout << a << " " << b;
return 0;
}