cjtsai
失蹤的c++殭屍
所以我們甚麼時候要換模板
要燒雞ㄌ
名 | var_a | var_b | var_c | var_d |
型態 | int | long long | string | char |
值 | 0 | 1 | "cjtsai" | 'r' |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
int main(){
int var_a=0;
cout<<var_a; //0;
cout<<&var_a; //0x8071;
var_a=101;
cout<<var_a<<' '<<&var_a; // 101 0x8071
} //我只是想說變數位址跟他自己的值沒關係
每次執行的變數都會存在不同位址
不同電腦也都會有些差異喔
但格式都差不多
int* a = &b
T* a = &b
名 | var_a | pt_a | var_c | pt_c |
型態 | int | int* | string | string* |
值 | 0 | 0x8071 | "cjtsai" | 0x8073 |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
int main(){
int var_a=0;
int* pt_a = &var_a;
cout<<var_a; //0
cout<<pt_a; //0x8071
cout<<*pt_a; //0
}
int main(){
std::string var_c="cjtsai";
std::string* pt_c = &var_c;
cout<<var_c; //"cjtsai"
cout<<pt_a; //0x8073
cout<<*pt_a; //"cjtsai"
}
名 | var_a | pt_a | var_c | pt_c |
型態 | int | int* | string | string* |
值 | 0 | 0x8071 | "cjtsai" | 0x8073 |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
持續燒雞中
int main(){
int var_a=0;
int& ref_a=var_a;
cout<<ref_a<<' '<<var_a; //0 0
ref_a=10;
cout<<ref_a<<' '<<var_a; //10 10;
}
int& a = b
T& a = b
兩個變數var_a 跟 ref_a 的值同步了!
名 | var_a | pt_a | var_c | pt_c |
型態 | int | int* | string | string* |
值 | 0 | 0x8071 | "cjtsai" | 0x8073 |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
int main(){
int var_a=0;
int& ref_a=var_a;
}
ref_a
名 | var_a | pt_a | var_c | pt_c |
型態 | int | int* | string | string* |
值 | 0 | 0x8071 | "cjtsai" | 0x8073 |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
int main(){
int var_a=0;
int& ref_a=var_a;
cout<<ref_a; //0
cout<<&var_a<<' '<<&ref_a; //0x8071 0x8071 一樣欸
}//再次複習 & 是用來取得某個變數的記憶體位址喔
ref_a
他們的記憶體位址
輸出後是同個欸
名 | a | b | c | d |
位址 | 0x8071 | 0x8072 | 0x8073 | 0x8074 |
int a=10;
int *b=&a;
int *&c=b;
int **d=&b;
遞迴只應天上有 凡人應當用迴圈
--資訊之芽
#include <bits/stdc++.h>
using namespace std;
int fibo(int n){
if(n==1) return 1;
if(n==2) return 1;
return fibo(n-1)+fibo(n-2);
}
int main(){
cout<<fibo(5); //5
}
#include <bits/stdc++.h>
using namespace std;
int fibo(int n){
if(n==1) return 1;
if(n==2) return 1;
return fibo(n-1)+fibo(n-2);
}
int main(){
cout<<fibo(5); //5
}
這裡我們在定義fibo這個函數
但我們在定義的時候使用了fibo這個函數
這就是遞迴函式特殊的寫法
我叫 邊界條件
如果沒有邊界條件 呼叫了 fibo(1) 會發生甚麼事?
fibo(1)會去呼叫 fibo(0)跟fibo(-1) 但這完全不合理
所以我們要設定邊界 適當的邊界能使程式執行成功並且不會吃到一些錯誤
像是maximum recursion depth exceed之類的
注意函式要宣告在main函數外面
但是好像有個東西叫做lambda
你可以輕鬆寫出比這個好很多的fibo函式
但我們先別在意這個問題
#include <bits/stdc++.h>
using namespace std;
int fibo(int n){
if(n==1) return 1;
if(n==2) return 1;
return fibo(n-1)+fibo(n-2);
}
int main(){
cout<<fibo(5); //5
}
return 2;
return 3;
return 2;
return 5;
順帶一提
不覺得這個遞迴呼叫了很多次相同的東西嗎
如果可以記錄已經算過的項 紀錄狀態
是不是能快很多呢
但這就是以後的事了
By cjtsai