陣列宣告和定義的注意事項

2021-08-15 11:43:03 字數 2021 閱讀 6349

一、不允許陣列拷貝和賦值

int a = ; //含有3個整數的陣列

int a2= a;//錯誤:不允許使用乙個陣列初始化另乙個陣列

a2 = a; //錯誤:不能把乙個陣列直接賦值給另乙個陣列

二、複雜的陣列宣告

int arr[10];

int *ptrs[10]; //ptrs是含有10個整形指標的陣列

int &refs[10]=/*?*/; //錯誤:不存在引用的陣列

int (*parray)[10] = &arr; //parray指向乙個含有10個整數的陣列

int (&arrref)[10] = arr; //arrref引用乙個含有10個整數的陣列

int *(&arry)[10] = ptrs;//arry是陣列的引用,該陣列含有10個指標

三、指標和陣列

int ia[10];

auto ia2(ia);//ia2是乙個整型指標int *,指向ia的第乙個元素。

ia2= 42;//錯誤:ia2是乙個指標,不能用int值給指標賦值。

auto ia3(&ia[0]); //顯然ia2的型別是int*。

decltype(ia) ia4 = ;//正確:當使用decltype關鍵字時不會發生轉換,decltype(ia)返回的型別是由10個整數構成的陣列。

int p = 0;

ia4 = p; //錯誤:不能用整型指標給陣列賦值。

ia4[4] = 10;//正確:把i的值賦給ia4的乙個元素。

四、指向陣列尾部的下乙個地主

1. int arr[10] = ;

int *e = &arr[10];//指向arr尾元素的下一位置的指標

利用e來寫陣列迴圈

for(int *b = arr; b != e; ++b)

cout << *b << endl; //輸出arr的元素

2.使用標準庫函式begin和end。

int arr[10];

int *beg = begin(arr);

int *last = end(arr);

for (beg;beg != last;++beg)

五、下標和指標

int ia = ;

int *p = ia;

int k = p[-2];//p[-2]是ia[0]表示的那個元素

六、使用陣列初始化vector物件

不允許使用乙個陣列為另乙個內建型別的陣列賦初值,也不允許使用vector物件初始化陣列。相反的,允許使用陣列來初始化vector物件。要實現這一目的,只需指明要拷貝區域的首元素位址和尾後位址就可以了:

int int_arr = ;

vectorivec(begin(int_arr),end(int_arr)); //ivec有6個元素,分別是int_arr中對應元素的副本。

用於初始化vector物件的值也可能僅是陣列的一部分

vectorsubvec(int_arr + 1, int_arr + 4); //拷貝三個元素:int_arr[1]、int_arr[2]、int_arr[3];

[注意]:盡量使用標準庫型別而非陣列。

七、使用範圍for語句處理多維陣列

int ia[rowcnt][colcnt]; //12個未初始化的元素

//對於每一行

for(size_t i = 0; i != rowcnt; ++ i)

//對於行內每一列

for(size_t j = 0; j != colcnt; ++j)

//將元素的位置索引作為它的值

ia[i][j] = i * colcnt +j;

由於c++新標準中新增了範圍for語句,所以前乙個程式可以簡化如下形式:

size_t cnt = 0; 

for(auto &row : ia)//必須用引用的形式,如果不用就相當於row的型別是int *,這樣內層的迴圈就不合法了,編譯器會報錯。

for(auto &col : row)

col = cnt;  

++cnt;

VirtualHost宣告的注意事項

使用virtualhost 標籤建立虛擬主機的時候,要注意同時使用 ip 和 servername。如果不這樣會造成以下問題 假如我們的宣告是這樣的 ps 10.1.1.1 對應的網域名稱為 www.abc.com 那麼apache http server 會去查dns伺服器 如果dns伺服器dow...

Fortran 宣告的注意事項

implicit none 讓每個變數必須顯示宣告。parameter 常數宣告 常數宣告的兩種方法 program parameter implicit none real a real parameter b 3.15 parameter a 3.14 write 3x,f5.2 a write...

陣列注意事項

1.宣告陣列時候不能帶長度 例如 dog mydogs 7 錯誤 2.但是可以在宣告的時候把方括號放在左右兩邊 例如 int mysocres 雖然這樣的宣告讓人不爽,但是如果這樣宣告對於語法是完全正確的。可以編譯通過的。byte big new byte 7 7 byte b new byte 2...