日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

oracle 声明二维数组,[zt]C++二维数组讲解、二维数组的声明和初始化

發布時間:2025/3/20 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 声明二维数组,[zt]C++二维数组讲解、二维数组的声明和初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:

int *pia = new int[10]; //array of 10 uninitialized ints

此?new?表達式分配了一個含有 10 個?int?型元素的數組,并返回指向該數組第一個元素的指針,此返回值初始化了指針?pia。

在自由存儲區中創建的數組對象是沒有名字的,只能通過其地址間接地訪問堆中的對象。

注意:C++使用new和delete在堆(自由存儲區)上分配和釋放動態數組。

動態數組初始化:

1. 元素只能初始化為元素類型的默認值,而不能像數組變量一樣,用初始化列表為數組元素提供各不相同的初值。

2. 對于內置數據類型元素的數組,必須使用()來顯示指定程序執行初始化操作,否則程序不執行初始化操作:

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

3.類類型元素的數組,則無論是否使用(),都會自動調用其默認構造函數來初始化:

string *psa = new string[10]; //每個元素調用默認構造函數初始化 string *psa = new string[10](); //每個元素調用默認構造函數初始化

動態分配空數組:

char *cp = new char[0];

之后,可以動態改變cp的維數。

動態釋放:

delete [] pia;

典型使用示例:

const char *pc = "a very long literal string"; //處理C風格字符串時使用const指針 const size_t len = strlen(pc) +1; //size_t用于數組的大小和下標 for (size_t ix = 0; ix != 1000000; ++ix) { char *pc2 = new char[len]; //pc2指向的存儲空間的內容會動態改變,因此不使用const strncpy (pc2, pc, len); //使用strncpy比使用strcpy安全 //do something; delete[] pc2; }

一、數組定義和初始化

1: 一維數組初始化:

2: 標準方式一: int value[100]; //value[i]的值不定,沒有初始化 3: 標準方式二: int value[100] = {1,2}; //value[0]和value[1]的值分別為1和2,而沒有定義的value[i>1] 4: //則初始化為0 5: 指針方式: int* value = new int[n]; //未初始化 6: delete []value; //一定不能忘了刪除數組空間 7: 8: 二維數組初始化: 9: 標準方式一: int value[9][9]; //value[i][j]的值不定,沒有初始化 10: 標準方式二: int value[9][9] = {{1,1},{2}}; //value[0][0,1]和value[1][0]的值初始化,其他初始化為0 11: 指針方式一: int (*value)[n] = new int[m][n]; 12: delete []value; //n必須為常量,調用直觀。未初始化 13: 指針方式二: int** value = new int*[m]; 14: for(i) value[i] = new int[n]; 15: for(i) delete[]value[i]; 16: delete []value; //多次析構,存儲麻煩,未初始化 17: 指針方式三: int * value = new int[3][4]; //數組的存儲是按行存儲的 18: delete []value; //一定要進行內存釋放,否則會造成內存泄露 19: 20: 多維數組初始化: 21: 指針方式: int * value = new int[m][3][4]; //只有第一維可以是變量,其他幾維必須都是常量,否則會報錯 22: delete []value; //一定要進行內存釋放,否則會造成內存泄露

數組初始化的大括號后面要加“;”來表示結束。

數組訪問:

指針形式:如二維數組value[i][j]的訪問:

*(value[i] + j) 或

(*(value + i))[j]

二、數組作為參數傳遞

1: 一維數組參數傳遞:

2: void Func(int *value); 3: 或者是 4: void Func(intvalue[]); 5: 6: 二維數組傳遞: 7: 定義是 int **value;的傳遞 8: void Func(int **value); 9: 定義是 int (*value)[n] = new int[m][n];的傳遞 10: void func(int (*value)[n]); //sizeof(p)=4,sizeof(*value)=sizeof(int)*n;

三、數組與指針關系

1、數組名的內涵在于其指代實體是一種數據結構,這種數據結構就是數組;

2、數組名的外延在于其可以轉換為指向其指代實體的指針,而且是一個指針常量;

3、指向數組的指針則是另外一種變量類型,(在win32平臺下,長度為4),僅僅意味著數組存放地址。

4、數組名作為函數形參時,在函數體內,其失去了本身的內涵,僅僅只是一個指針,而且在其失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。

四、數組的存儲格式

多維數組在內存中存儲時是按照最低維連續的格式存儲的,如二維數組{{1,2},{3,4}}在內存中的位置是這樣順序的“1,3,2,4”,這跟matlab是有區別的,matlab是按列進行存儲的。在使用指針進行索引時很有用。

五、字符數組

char類型的數組被稱作字符數組,通常用來存儲字符串。字符串是附加有特殊字符(串尾標志)的字符序列。串終止字符表明字符串已經結束,該字符由轉義序列‘\0’定義,有時被稱為空字符,占用一個字節,其中8位全為0。這種形式的字符串通常被稱為C型字符串,因為以這樣的方式定義字符串是在C語言中推出的,在C++一般使用string,而MFC中則定義了CString類。

字符串中每個字符占用一個字節,算上最后的空字符,字符串需要的字節數要比包含的字節數多一個。如:

char movie_star[15] = “Marilyn Monroe”;

這里字符串是14個字符,但是要定義15個字符串的數組。也可以不指定字符數組的個數。如:

char movie_star[] = “Marilyn Monroe”;

六、內存泄露

我們定義了一個指針,然后給它賦予了一個地址值,然后又不再使用,但是沒有delete,那么當給指針賦予其他的地址值時,原來的內存將無法釋放,這就叫做內存泄露。

總結

以上是生活随笔為你收集整理的oracle 声明二维数组,[zt]C++二维数组讲解、二维数组的声明和初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。