1. 程式人生 > >C++ new 動態陣列初始化

C++ new 動態陣列初始化

問題:紅字部分的程式碼是否有問題?

程式碼是沒有問題的,考慮的是new申請的記憶體有沒有初始化?

在這段程式碼中,有無初始化是沒有關係的,因為str字串中已含有字串結束標誌。

inline mystring::mystring( const char* str )
{
	if (!str){
		m_pdata = 0;
	} 
	else{
<span style="color:#ff0000;">		m_pdata = new char[strlen(str)+1];
		strcpy(m_pdata,str);</span>
	}
}

動態陣列初始化:


對於內建資料型別元素的陣列,必須使用()來顯示指定程式執行初始化操作,否則程式不執行初始化操作:

int *pia = new int[10]; // 每個元素都沒有初始化

int *pia2 = new int[10] ();  // 每個元素初始化為0


類型別元素的陣列,則無論是否使用(),都會自動呼叫其預設建構函式來初始化:

string *psa = new string[10];  // 每個元素呼叫預設建構函式初始化

string *psa = new string[10]();  // 每個元素呼叫預設建構函式初始化

參考:http://www.cnblogs.com/mywebname/articles/2291540.html

相關推薦

C++ new 動態陣列初始

問題:紅字部分的程式碼是否有問題? 程式碼是沒有問題的,考慮的是new申請的記憶體有沒有初始化? 在這段程式碼中,有無初始化是沒有關係的,因為str字串中已含有字串結束標誌。 inline mystring::mystring( const char* str ) {

c++ 二維動態陣列初始及作為引數傳遞

學習c++動態二維陣列寫的程式碼,程式已經在VS2010上跑過了,是ok的包括動態二維陣列的建立,初始化,以及作為形參傳遞#include <iostream> #include<vector> using namespace std; typede

C++ 類物件陣列初始

如何給類中定義了帶有引數的建構函式的物件陣列賦值 class A { public: A(){}//無參建構函式0 A(int i){}//有參建構函式1 A(int i,int j){}//有參建構函式2 }; int main() { A a,b[5];

c++類物件陣列初始的幾種方法

    類物件陣列初始化     如有一個如下類:    class EquipmentPiece {    private:        int IDNumber;    public:        EquipmentPiece(int IDNumber) : IDNumber(IDNumber) {

C語言的陣列初始

    這是很基礎的東西,但基礎的重要性不言而喻,我敢肯定這個知識點我肯定曾經瞭解過,但現在,我不敢確定,由此可見紀錄的重要性,這世界沒有什麼捷徑,找對方向,然後不停重複.所以從今天開始,我會比較詳細的紀錄這些比較小的知識點,其實還是有不少有意思的地方的.     寫這篇文章

Linux GNU C結構體陣列初始示例

實然心血來潮,想學習一下結構體陣列的初始化方面的知識。 以下是GCC實然心血來潮,想學習一下結構體陣列的初始化方面的知識。特有的陣列初始化的風格: // 陣列賦值另一種方式,但只在gcc下編譯通過,g++不能 enum { AAA = 0, BBB, CCC,

關於vector二維動態陣列初始

       很多時候,我們要使用動態陣列來儲存一開始未知數量的資料時,往往都是在程式中得到行數和列數,然後再對陣列進行初始化。可是,如果我們只知道行或者列其中的一個數量,可以進行動態陣列初始化嗎?        答案是可以的。如果我們知道行數,那麼初始化可以如此寫:vec

c++ 用new動態申請陣列初始的問題

注意括號的使用 注意:C++使用new和delete在堆(自由儲存區)上分配和釋放動態陣列。 動態陣列初始化: 1.元素只能初始化為元素型別的預設值,而不能像陣列變數一樣,用初始化列表為陣列元素提供各不相同的初值。 2.對於內建資料型別元素的陣列,必

C/C++陣列初始的總結

目錄 陣列定義不初始化會被隨機賦值 陣列初始化的幾種形式 陣列初始化為某一固定值 memset(陣列名,值,sizeof(陣列名)) fill(begin(),end(),value) 以前剛開始學陣列初始化,一直都沒搞太清楚,包括參加PAT考試,直到看了胡凡的《演算

C語言陣列初始

/*C++使用new關鍵字分配記憶體,而C使用malloc(memory allocate)來分配記憶體*/ #include <stdio.h> #include <malloc.h> /*使用typedef把int型別命名為新型別xx*/ typedef

C++陣列初始

C++陣列初始化 定義: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表示式分配了一個含有 10 個 int 型元素的陣列,並返回指向該陣列

C/C++陣列初始的一些誤區

以前我這樣初始化一個數組,並自我感覺良好: int a[5] = { 0 }; // 全部初始化為0這種簡單的寫法讓我非常爽,於是我又想把陣列全部初始化為1:int a[5] = { 1 }; // 我想全部初始化為1直到十分鐘前,我都以為這句程式碼確實能夠將5

C++陣列初始的誤解

一直以為 int a[256]={0};是把a的所有元素初始化為0,int a[256]={1};是把a所有的元素初始化為1. 除錯的時檢視記憶體發現不是那麼一回事,翻了一下《The C++ Programming Language》總算有定論。PDF的竟然不然複製,就把它這章翻譯了, 如下5.2.1  

JAVA中陣列初始時用new與不用new有區別嗎

不同於String類,String由於實現了常量池 所以new 和不new 有區別:new的話,引用變數指向堆區。不new的話,引用變數指向常量池。對於陣列的定義,初始化時用new與不用new 沒區別,

C++:二維陣列初始

二維陣列初始化分為多種形式。注意,當只對部分元素賦初值時,對於int型陣列,未賦初值的元素自動取0值。 1)按行賦值 int a[ ][3]={{1,2,3},{4,5,6}}; ——相當於{{1,2,3},{4,5,6}} int a[ ][3]={{1,2},{0

C#語法小問題之不用new方法物件初始

ControllerInfoCollection controllers = scanner.Controllers;已知:ControllerInfoCollection是一個類名,scanner.Controllers表示物件scanner訪問屬性Controller

C++new動態分配記憶體生成陣列

#include <iostream> using namespace std; static int b[3][3]; void change(int (*a)[3])//轉置函式 { for(int m=0;m<3;m++) { for(int

使用C風格陣列初始vector陣列

#include <iostream> #include <vector> using namespace std; /* 總結:使用陣列初始化vector陣列:必須指出陣列第n個元素以及陣列n+x元素的下一位置的地址 如果超過原陣列的下一個元素的

C語言 陣列初始的三種常用方法({0}, memset, for迴圈賦值)以及原理

C語言 陣列初始化的三種常用方法({0}, memset, for迴圈賦值)以及原理 C語言中,陣列初始化的方式主要有三種:

c++類 用冒號初始對象(成員初始列表)

函數 ace end -1 box 技術分享 對象 mage stream c++類 用冒號初始化對象(成員初始化列表) 成員初始化的順序不同於它們在構造函數初始化列表中的順序,而與它們在類定義中的順序相同 #include<iostream> int n=0