1. 程式人生 > >指標與動態陣列初步+動態陣列元素個數確定方法

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

一、學到指標與動態陣列趕緊記錄一下

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

下面是一部分簡單的程式碼

#include<iostream>
using namespace std;

int main()
{
	//動態陣列的存在就是因為陣列的元素個數往往在程式執行時才能確定,如number_of_element
	int num_of_element;
	cout << "請輸入元素的個數: " << endl;
	cin >> num_of_element;
	double *p_ptr;
	p_ptr = new double[num_of_element];
	double numbers;
	cout << "請輸入,以負數結束:" << endl;
	cin >> numbers;
	for (int i = 0; numbers >= 0 && i<10; ++i)
	{
		p_ptr[i] = numbers;
		cin >> numbers;
	}
	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])

程式碼:

#include<iostream>
using namespace std;

int main()
{
	//動態陣列的存在就是因為陣列的元素個數往往在程式執行時才能確定,如number_of_element
	int num_of_element;
	cout << "請輸入元素的個數: " << endl;
	cin >> num_of_element;
	double *p_ptr;
	p_ptr = new double[num_of_element];
	double numbers;
	cout << "請輸入,以負數結束:" << endl;
	cin >> numbers;
	for (int i = 0; numbers >= 0 && i < 10; ++i)
	{
		p_ptr[i] = numbers;
		cin >> numbers;
	}

	cout << "動態陣列輸出如下:" << endl;
	for (int i = 0; i < num_of_element; ++i)
		cout << p_ptr[i] << " ";
	cout << endl;

	int A[]= { 11,12,13 };
	cout << "陣列A位元組長度:"<<sizeof(A) << endl;
	cout << "陣列A一個元素的位元組長度:" << sizeof(A[0]) << endl;//相當於sizeof(int);
	cout << "陣列A元素個數:"<<sizeof(A) / sizeof(A[0]) << endl;

	cout << "動態陣列位元組長度:" << _msize(p_ptr) << endl;
	cout << "動態陣列一個元素的位元組長度:" << sizeof(p_ptr[0]) << endl;//相當於sizeof(double);
	cout << "動態陣列元素個數:" << _msize(p_ptr) / sizeof(p_ptr[0]) << endl;

	system("pause");
}

輸出:

三、多一點點的思考

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

結果:4或8.

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