指標
先看到程式碼
#include <bits/stdc++.h>
using namespace std;
#define nn "\n"
void square(vector<int>&arr){
arr.push_back(21);
return;
}
int main() {
int n=9;
int*k=&n;
cout<<"k_it: "<<k<<nn; //k: 0x61fee8
cout<<"k_val: "<<*k<<nn; //k_val: 9
int&m=n; //取別名
cout<<"m: "<<m<<nn; //m: 9
n+=1; //不加在m,加在n
cout<<"m: "<<m<<nn; //m: 10
pair<int,int>* p= new pair<int,int>{1,2};
cout<<"p: "<<p<<nn; //p: 0x11d7b80
vector<int>v={37};
square(v);
cout<<"v: ";
for(int i:v){
cout<<i<<" "; //v: 37 21
}
}
k_it: 0x61fedc
k_val: 9
m: 9
m: 10
p: 0x10c7b80
v: 37 21
看完程式碼,接下來介紹
- *
- &
- new
的用法
*、&用法
先定義 int x 中的 x 是一個物件
*和&分為「宣告模式」、「呼叫模式」(非正式名稱,本文亂教)如下表
| 運算子 | 宣告模式 | 呼叫模式 |
|---|---|---|
| * | 製作存位置的變數。 【註一】 | 回傳變數(該變數為位置)的物件。 【註二】 |
| & | 製作對於某物件的別名。 【註三】 | 取得變數(該變數為物件)的址(位置)。 【註四】 |
以下為方便講解,不按照順序
\(「\&」\) 呼叫模式,取得變數(該變數為物件)的址(位置)。
- 格式:
&{變數} - 範例(&與變數間有空格不影響
int n=10; cout<< & n; //0x61ff0c
\(「*」\) 宣告模式,製作存位置的變數。
- 格式:
{資料型態}*{變數} -
範例(*靠近資料型態或是變數不影響結果
注意不能
int * n, * k,不能連續使用,此時的k不會如預期。int n=10; int * k = &n; cout<<k; //0x61ff08
\(「*」\) 呼叫模式,回傳變數(該變數為位置)的物件。
- 格式:
*{變數} - 範例(*與變數間有空格不影響
int n=10; int * k = &n cout<< * k; //10
\(「\&」\) 宣告模式,製作對於某物件的別名。
- 格式:
&{變數} - 範例(&與變數間有空格不影響
int n=10; int & c = n; cout<<c; //10 n+=1; cout<<c; //11
new 用法
拿一個位置放變數,回傳指標
pair<int,int>* p= new pair<int,int>{1,2};
cout<<p<<nn; //0x11d7b80