Skip to content

指標

先看到程式碼

#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   

看完程式碼,接下來介紹

  1. *
  2. &
  3. 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