指標與動態陣列初步 動態陣列元素個數確定方法

2021-08-29 22:41:42 字數 1927 閱讀 6291

用new操作符為陣列分配記憶體尤其有用,因為陣列的元素個數往往是在程式執行時才能計算得出的 ——《資料結構與物件導向程式設計》(c++版)michael main等編著

下面是一部分簡單的**

#includeusing namespace std;

int main()

for (int i = 0; i < num_of_element; ++i)

cout << p_ptr[i] <

cout << endl;

system("pause");

}

會發現動態陣列的初始化可以不是乙個常量,而是在程式執行過程中確定下來的,如num_of_element.

輸出:

普通陣列的元素個數:sizeof(a)/sizeof(a[0])

動態陣列的元素個數:_msize(p_ptr)/sizeof(p_ptr[0])

**:

#includeusing namespace std;

int main()

cout << "動態陣列輸出如下:" << endl;

for (int i = 0; i < num_of_element; ++i)

cout << p_ptr[i] << " ";

cout << endl;

int a= ;

cout << "陣列a位元組長度:"<輸出:

如果採用sizeof(p_ptr)會怎麼樣?

結果:4或8.

分析:p_ptr是乙個指標!sizeof(p_ptr)表示指標的位元組長度.32位作業系統是4個位元組(32/8bit),64位作業系統是8個位元組(64/8bit).

delete 操作符把由動態變數所使用的記憶體釋放出來。釋放出來的記憶體返回到記憶體堆中,後面可以重複使用這些記憶體。

① 釋放整型動態變數:

int *p;

p = new int;

delete p;

② 釋放整型動態陣列: 

int *p;

p = new int[50];

delete p;

可以為指標定義乙個名稱,這樣指標變數就可以像其他變數那樣進行宣告了,而且在每個指標變數的前面不需要新增 * 號。例如,下面語句定義了乙個名為int_pointer的資料型別,它是一種資料型別,用於定義指向 int 變數的指標變數。

typedef int* int_pointer;

int_pointer p_ptr;//定義了乙個指向int資料型別的指標變數p_ptr

這種型別的定義一般出現在標頭檔案中,或者是在主程式之前的函式原型集合中。有了這種定義,宣告語句 int_pointer p_ptr 與 int* p_ptr 是等價的。 l

int *p1;

int *p2;

p1 = new int;

p2 = new int;

*p1 = 100;

*p2 = 200;

cout << *p1 << " and " << *p2 << endl;

delete p1;

cout << *p1 << " and " << *p2 << endl;//*p1引發錯誤

參考:《資料結構與物件導向程式設計》(c++版)michael main等編著

C 指標與動態陣列

使用new 和 delete,動態地調整陣列大小,通常是當前陣列滿了的時候,將陣列容量翻倍,假設用int變數capacity代表當前陣列大小,ptr是當前陣列指標 float tempptr new float capacity 2 for int i 0 i capacity i delete p...

陣列 指標 引用 動態陣列

因為我本身是學過這些的,這一遍是複習和總結,不會面面俱到,希望和大家一起分享。1 陣列的建立和初始化 1.1 陣列是一種完全靜態的資料結構,在建立時,陣列的維度必須是乙個在編譯時就可以確定的整形常量表示式 和switch的case後面的表示式那樣 舉個例子 int arr1 2 是合法的,const...

陣列與動態陣列

int main other element will be set as the default value 2.get length int size sizeof a1 sizeof a1 cout the size of a1 is size endl 3.access element co...