標籤:c++ 數組 動態數組
數組:
#include <iostream>using namespace std;//模板函數template <class T>void dump(T val){cout << ">>>>" << __FUNCTION__ << endl;//內建的宏,列印當前函數的名字cout << sizeof(val) << ":" << typeid(val).name() << endl;cout << "<<<<" << __FUNCTION__ << endl << endl;}void dump1(int a[]){cout << "a=" << a << endl;//第一個元素的地址cout << "&a=" << &a << endl;//指標的指標cout << "a+1=" << a + 1 << endl;//數組第二個元素的地址(+4)cout << "&a+1=" << &a + 1 << endl;//指向指標地址的下一個變數(+4) }int main(){const int len = 6;int a[len] = { 0, 2, 4, 6, 8 };//賦值少一個沒關係,沒有賦值會有預設值0int *pa = a;int *pa2 = a;//a是一個指標指向數組的第一個元素cout << "a=" << a << endl << "&a[0]=" << &(a[0]) << endl;for (int i = 0; i < len;i++){a[i] = i;cout << "a[" << i << "]=" << a[i] << " " << "*(a+i)=" << *(a + i) << " " << "*(i+a)=" << *(i + a) << " " //由上面運算式根據加法的結合律 << "i[a]=" << i[a] << " " //cout << *(a++) << endl;//編譯出錯,a是數組的首地址(相當於常量),不能再對a進行賦值了 << "*(pa++)=" << *(pa++) << " " << "pa[" << i << "]=" << pa2[i] << " " << "*(pa+i)=" << *(pa2 + i) << " " << "i[pa]=" << i[pa2] << " " //綜上,運算元組可以通過數組名,也可以通過指標變數 << endl;} cout << "===================數群組類型和指標類型=======================" << endl;cout << sizeof(a) << ":" << typeid(a).name() << endl;//24:int[6]dump(a);//4:int*//在數組聲明的範圍之內,a是數群組類型;在範圍之外(包括函數傳遞),a退化成一個整形指標cout << "====================數群組類型取地址======================" << endl;cout << "a=" << a << endl;cout << "&a=" << &a << endl;//和上面的值一致都是第一個元素的地址cout << "a+1=" << a+1 << endl;//數組第二個元素的地址(+4)cout << "&a+1=" << &a+1 << endl;//數組後一個變數的地址(+4*6)cout << "====================指標類型取地址======================" << endl;dump1(a);return 0;}
動態數組:
#include <iostream>using namespace std;/*C++記憶體管理 棧:編譯器自動分配和刪除變數的區 儲存如局部變數,函數參數等; 高效但空間有限 堆:儲存由應用程式分配和刪除的區 不釋放分配的記憶體會造成記憶體泄露 全域/靜態儲存區:儲存全域變數和靜態變數 常量儲存區:存放常量,不允許修改*/int main(){//動態數組定義格式:int *a = new int[array_size];//釋放格式:delete []a;int len = 0;cin >> len;int *p = new int[len];for (int i = 0; i < len;i++){p[i] = i;cout << "p[i]=" << p[i] << endl;}delete []p;return 0;}
區別:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java程式員學習C++之數組和動態數組