1樓:敗筆i無悔
c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++於2023年8月18日公佈。
其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性!
陣列必須作為 extern 或者 static 儲存類來定義才能初始化
分行給二維陣列賦初值。如
static int a[3][4]=,,};
這種賦初值方法比較直觀,把第一個花括弧內的資料賦給第一行的元素,第二花括弧內的資料賦給第二行的元素,......,即按行賦初值。
可以將所有資料寫在一個花括弧內,按陣列排列的順序對各元素賦初值。如:
static int a[3][4]=;
效果與前相同。但以第1種方法為好,一行對一行,界限清楚。用第2種方法如果資料多,寫成一大片,容易遺漏,也不易檢查。
可以對部分元素賦初值。
static int a[3][4]=,,};
它的作用是隻對各行第1列的元素賦初值,其餘元素值自動為0。賦初值後陣列各元素為
也可以對各行的某一元素賦初值:
static int a[3][4]=,,};
初始化後的陣列元素如下:
這種方法對非0元素少時比較方便,不必將所有的0都寫出來,只需輸入少量資料。也可以只對某幾行元素賦初值:
static int a[3][4]=};
陣列元素為:
第三行不賦初值。也可以對第二行不賦初值:
static int a[3][4]=,{},};
如果對全部元素都賦初值(即提供全部初始資料),則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。如
static int a[3][4]=;
與下面的定義等價:
static int a[4]=;
系統會根據資料總個數分配儲存空間,一共12個資料,每行4列,當然可確定為3行。
在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。如
static int a[4]=,{},};
這樣的寫法,能通知編譯系統:陣列共有3行。陣列各元素為memset(buff,0,5*100*sizeof(char));
2樓:和小敘
這個......
不管是多維陣列還是一維陣列,其實都是一個意思,它們存放在記憶體當中都是連續的,只是表示的方法不一樣而已。
要用陣列首先要清楚,一個陣列在定義時長度已經是確定了的(即陣列元素個數確定),確定了編譯器才知道分多少記憶體給這個陣列,不然編譯出錯。如果你在定義陣列時沒有說明陣列長度,只給出陣列各個元素的值,編譯器會根據給出的元素值的個數確定陣列長度。下面的兩種情況:
char arr1[8] = ; //陣列長度為8 能表示到arr1[7]
char arr2[ ] = ; //陣列長度為2 只能表示到arr2[1]
這裡有個預設值的說法。沒初始化的陣列元素它們都預設為0。也就是說,在你定義一個陣列時已經確定了它的長度,如果你不初始化它們,預設都為0 。
你的程式中只是對第一個元素給出了3,其它的都沒有初始值,預設為0。
因此才會輸出0。這很正常。
給你個建議,如果你嫌你定義的陣列太大了,每個都要寫個3,太痛苦了,可以來三層迴圈:
for(i = 0;i < 10;i ++)}}
這樣每個都是3了。
3樓:吥洅丨錯過
我們知道,一維空間是一條線,數學中用一條數軸來表達;二維空間是一個平面,數學中用平面座標系來表達。那麼二維陣列又是什麼樣的呢?
線與面我們用一個下標來描述一維陣列中的某個元素,就好像在用數描述一條線上的點。而所有的資料都是儲存在一條線上。如果我們採用兩個下標,就能形成一個平面,猶如一張**,有行有列,所有的資料就能夠存放到**裡。
我們把二維陣列的兩個下標分別稱為行下標和列下標,在前面的是行下標,在後面的是列下標。
那麼什麼時候要用二維陣列呢?一般有兩種情況,一種是描述一個二維的事物。比如用1表示牆,用0表示通路,我們可以用二維陣列來描述一個迷宮地圖;用1表示有通路,0表示沒有通路,我們可以用二維陣列來描述幾個城市之間的交通情況。
還有一種是描述多個具有多項屬性的事物。比如有多個學生,每個學生有語文、數學和英語三門成績,我們就可以用二維陣列來描述。
對於第二種情況,我們要注意各項屬性應該是同一種資料型別,比如三種學科的成績都是整數。如果出現了姓名(字串屬性),就不能將他們組合到一個二維陣列裡去。所以不要企圖將不同資料型別的屬性整合到一個二維陣列中去。
二維陣列的宣告和初始化
二維陣列的宣告和一維陣列是類似的,不同之處只是多了一個下標:
資料型別陣列名[行數][列數];
要注意,二維陣列的下標也都是從0開始的。
二維陣列的初始化分為兩種,一種是順序初始化,一種是按行初始化,我們來看一段程式,就能夠對它們有所瞭解了:(程式7.4.1)
#include "iostream.h"
#include "iomanip.h"
int main()
;//順序初始化
int array2[3][2]=,,};//按行初始化
cout <<"array1" < for (int i=0;i<3;i++)//輸出陣列array1 cout < }cout <<"array2" < for (int k=0;k<3;k++)//輸出陣列array2 cout < }return 0; }執行結果: array1 4 25 6 13 4 array2 4 25 8 6 8我們可以看出,所謂按順序初始化就是先從左向右再由上而下地初始化,即第一行所有元素都初始化好以後再對第二行初始化。而按行初始化則是用一對大括號來表示每一行,跳過前一行沒有初始化的元素,在行內從左向右地進行初始化。對於沒有初始化的元素,則都是一個不確定的值。 省略第一維的大小 我們在第一節學到,一維陣列的大小可以省略。可是二維陣列的元素個數是行數和列數的乘積,如果我們只告訴電腦元素個數,電腦無法知道究竟這個陣列是幾行幾列。所以,c++規定,在宣告和初始化一個二維陣列時,只有第一維(行數)可以省略。 比如:int array[3]=; 相當於: int array[2][3]=; 二維陣列在記憶體中的儲存情況 先前已經說明,記憶體是依靠地址來確定記憶體中的唯一一個儲存單元的,即只有一個引數。所以在記憶體中,所有的資料都是像一維陣列那樣順序儲存的。那麼具有兩個下標的二維陣列是怎樣存放到記憶體中的呢? 在記憶體中,先將二維陣列的第一行按順序儲存,接著就是第二行的資料,然後是第三行的資料……右圖(圖7.4)所示的就是一個二維陣列在記憶體中的儲存情況。 向函式傳遞二維陣列 我們知道,陣列作為引數傳遞給函式的是陣列首元素的地址。對於二維陣列來說亦是如此。不過有兩個問題,一個是我們必須讓函式知道行數和列數,這就像我們要讓函式知道一維陣列的大小一樣,防止發生越界訪問。 另一個就是我們必須讓電腦知道這個二維陣列是怎樣的一個**,即必須告知陣列的列數。這和只能省略二維陣列的行數道理是一樣的。下面我們就來看一個向函式傳遞二維陣列的程式: #include "iostream.h" #include "iomanip.h" void disp(int a[2],int r,int c);//告知陣列的列數 int main() ;cout <<"array" < disp(array,3,2); 4樓: int arr[10][21][32]=;這樣對多維陣列可以初始化為全0。但遵循的規則是:陣列宣告並初始化時{}中沒有寫全的後面部分被自動初始化為0。 所以你寫int arr[10][21][32]=;的結果是arr[0][0][0]=3,其餘的都是0。想要初始化為全3,可以用memset函式。 5樓:特立獨行的瓜慫 如果是二維陣列就這樣 int a[2][3]=,} a[m][n]就有m個小{}號 最外面是{}號包起來每個小的{}裡有n個資料,可以部分初始化 也可以全部初始化 6樓:匿名使用者 多維陣列不能這樣初始化的,要用memset,而且只能是0和-1. c++ 的二維陣列初始化 7樓:巢婧谷和 絕對錯了,不錯你扇死我! 二維陣列的初始化分為,一種為按行分段初始化,另一種為按行連續初始化。 inta[2][3]=,,}; 這是第一種, inta[2][3]=; 這是第二種。 a這個二維陣列一共2行3列共6個儲存空間,圖形為:5678910 正好佔滿。 而且c語言預設可以省略行數,但不能省略列數你看看你的初始化 inta[4]=,{},}; 行數省略是沒有任何問題的。 但是你是按行分段初始化 第一行003 第二行第三行0 10注意了,你只對其中3行進行了初始化,第4行丟了。 所以a是一個半初始化的陣列,c編譯系統絕對不承認! 8樓:匿名使用者 上面的**中最後少了}; 另外陣列不能整體拷貝.只能通過下標逐個賦值 9樓:匿名使用者 (1)iostream後面不加.h, (2)int n[3][3]=0有誤,不能對陣列進行這樣的初始化,應該是對陣列元素逐個賦值 (3)int (*m)[3]=new int[3][3]; 前面不加int,加上的話,相當於在區域性對m重新定義 初始化方法如下: (1)int m[3][3]; for(int i = 0; i < 3; i++)for(int j = 0; j < 3; j++)m[i][j] = 0; (2)int **m = new int*[3]; for(int i = 0; i < 3; i++)(3)int *m[3]; int **m = new int*[3]; for(int i = 0; i < 3; i++)第二種寫法和第三種寫法本質上一樣的,指向指標的指標其實就是指標的陣列 定義成struct list 試試呢?struct list creat char name,int priority,int time 同學,你注意到了create 函式裡面,你又定義了一句 list pr 了麼?這句話時關鍵,首先,你在main 函式 我猜應該是main吧 中寫道 list pr... 區域性變數初始化 是指在使用這個區域性變數前,要對其進行初始化。這是因為區域性變數是從記憶體堆中分配的,用完就還給記憶體堆,所以被分配的區域性變數並不一定是0,而很可能是其他地方用過的一個值,因此在使用這個變數之前,要對它進行顯示初始化。c的區域性變數一般是在棧上進行分配的。棧使用的是ram,掉電內... 隱式初始化可以理解為自己不做任何的操作,有系統環境幫你完成變數的初始化。顯示的就是自己的操作了啊。隱式初始化,即在main 函式中,沒有顯式呼叫建構函式的語句。建構函式是在定義物件時被系統自動呼叫。如 類名 物件名 實參表 那麼顯式初始化應該是先宣告物件,再呼叫建構函式 即類名 物件名 物件名 建構...C語言結構體陣列的初始化,C語言結構陣列初始化的問題
關於C語言裡的初始化問題為什麼要初始化
C 中類的建構函式的隱式初始化和顯示初始化怎麼理解