字串除了存放在字元型陣列中,還能存放在文字常量區二維陣列定義時,一維大小可預設,但二維大小必須指明確定值;
錯誤使用例項:
char b[2][3]=; 錯誤,只有2行,卻定義了3個字串
1.、直接給每個元素賦值
int array[4]
=;2、賦值一部分,後面預設=
0int array[4]
=;3、不初始化
1、如果不初始化,區域性變數在棧上,各陣列元素的值將是隨機數;
2、全域性變數、靜態變數處於資料區,預設初始化為0
int array[4]
=;//未初始化的棧區:vs缺省會報錯;但如果關閉錯誤改為警告
// 則vs2015中編譯器預設(在vs2017下)都按照cc去填充?列印出來-858993460這個值即為0xcccccccc的十進位制表示
3. 由賦值引數個數推測陣列的個數
int array=
;int a[5]
[3]=
,,,,
};1、宣告時,使用 初始化;
2、使用memset;
3、用for迴圈賦值。
訪問二維陣列b的第i行第j列的方式:
b[i]
[j]*
(b[i]
+j)==*(
*(b+i)
+j) 這裡*
(b+i)
== b[i](*
(b+i)
)[j]
int array[3]
[4];*
(array[i]
+j)== array[i]
[j]*
(array+i)
== array[i] 行位址
錯誤示例: *
(array+i*
4+j)是第 (
4*i+j ) 行的首元素位址
列位址和行位址的偏移不能在乙個級別上+
int x =2;
//x定義並賦值,當然不一定是2
char array[x]
;
測試了一下,這樣的**在vc6.0下會報錯,因為對c99新標準沒有很好地實現。vs2005也不行。vs2013可以正確編譯。gcc 3.2.2也可以正確編譯
c貌似不支援引用傳遞陣列,而c++支援
呼叫函式的輸入實參可以是指標or陣列名
被呼叫函式接收陣列傳參的2種方式:
1、 位址傳遞
void
myfunction
(int
*param)
形式引數是乙個指標
2、 值傳遞(效率較低,不建議使用)
void
myfunction
(int param[10]
) 形式引數是乙個已定義大小的陣列
void
myfunction
(int param)
形式引數是乙個未定義大小的陣列
故可以有2*2
=4種傳遞方式
陣列名傳遞給指標
陣列名傳遞給陣列名
指標傳遞給陣列名
指標傳遞給指標
例項:
//陣列的兩種傳遞方式
#include
using namespace std;
//值傳遞
//缺點:每次都要傳遞?個位元組的陣列長度的陣列形參
void
fun1
(int a[5]
)//位址傳遞
//優點:每次只要傳遞4個位元組長度的指標變數即可
//缺點:陣列的長度不好獲取,在正常的開發中需要傳入長度,當然也可以使用其他的方式獲取
void
fun2
(int
*a)//主函式
intmain()
;fun1
(a);
//值傳遞 方式1
fun2
(a);
//位址傳遞 方式1
fun1
(&a[0]
);//值傳遞 方式2
fun2
(&a[0]
);//位址傳遞 方式2
cout<<
"a[3] = "
<
}
另外,fun1(a)和fun1(&a[0])、fun2(a)和fun2(&a[0])都是等價的,a表示陣列的首位址,&a[0]表示陣列的第乙個元素的位址,因而a==&a[0]。 c語言陣列
陣列 構造資料型別之一 陣列是具有一定順序關係的若干個變數的集合,組成陣列的各個變數稱為陣列的元素。陣列中各元素的資料型別要求相同,用陣列名和下標確定。陣列可以是一維的,也可以是多維的。在科學計算中,許多重要的應用都是基於陣列的。所謂一維陣列是指只有乙個下標的陣列。它在計算機的記憶體中是連續儲存的。...
C語言陣列
在變數作函式引數時,所進行的值傳送是單向的。即只能從實參傳向形參,不能從形參傳回實參。形參的初值和實參相同,而形參的值發生改變後,實參並不變化,兩者的終值是不同的。而當用陣列名作函式引數時,情況則不同。由於實際上形參和實參為同一陣列,因此當形引數組發生變化時,實參陣列也隨之變化。當然這種情況不能理解...
C語言 陣列
陣列 void test1 for int i 0 i 5 i for int i 0 i 5 i 陣列資料倒序存放 void test2 printf 請輸入5個學生的成績 n for int i 4 i 0 i printf 輸出5個學生的成績 n for int i 0 i 5 i 將陣列的長...