1.1.說明:
1)普通陣列無邊界檢查,訪問不夠方便,應用或替代
2)陣列宣告必用常量表示式;禁用變數;記憶體是連續的
3)初始化陣列元素個數必須<=陣列元素個數;沒提供元素系統初始化為0,0.0,\0
只需給首元素賦值0剩餘元素會自動初始化為 0( int arr[3]{} == int arr[3]= )
必須顯式指定除第一維之外的全部陣列維數;避免幻數-定義常量n
只能給元素逐個賦值不能給陣列整體賦值 int a[10] = 1;錯誤
1.2.定義:
arrayarr 替代:int a[rows]
array, rows> arr 替代:int a[rows][cols]
array, rows>, channels>arr 替代:int a[channels][rows][cols]
1.3.訪問:
arr.at(i);(arr[i]無邊界檢查) 替代:a[i];*(p+i);p=a=&a[0];
arr.at(row).at(col);(arr) 替代:a[r][c];*(p + r*cols+c);p=&a[0][0];
arr.at(channel).at(row).at(col);(arr)替代:a[ch][r][c];*(p+ch*rows*cols+r*cols+c);p=&a[0][0][0];
1.4.陣列大小:
int arr[6]{}; //所有元素初始化為0
int arr;//用初始化列表定義陣列大小
std::size(arr)==size(arr)/sizeof(arr[0]);
1.5注意:
1)& a[i][j] = &a[0][0] + i * sizeof(int)*n + j * sizeof(int);
2)*p++ = *(p++);先取第 n 元素值再將 p 指向下一元素
3)*++p = *(++p);//先進行++p運算,使得p值增加指向下一元素
相當 *(p + 1)獲得第n +1個陣列元素的值
4)sizeof 禁用函式,不完全型別(未知儲存大小資料型別(陣列, 結構, 聯合, void )與位欄位
獲取陣列的長度時不要對指標應用 sizeof 操作符
2.例項:
例項1.1:陣列初始化
int a=;
int a[2][3] = ;
int arr,} //錯誤
int a[3] = ,}; //不足部分用0來填補;
int a[2][3] = , }, } };
int a[2][2][3] = , },, } };
int a[2][2][3] = ;
int a[2][2][3] = ; //利用元素指示符
int a[2][2][3] = ,[0][1] = ,[1][0] = }; //等價上面
int arr[3][4],,},
,,}};
例項1.2:
void view_array_2d();
int* p2 = &arr2[0][0];
for (long long i1 = 0; i1 < 3; i1++)//cout << arr2[i1][i2] << ",";等效
cout << endl;
} }
void view_array_3d();
int* p = &arr3[0][0][0];
for (long long i1 = 0; i1 < 2; i1++)//cout << arr3[i1][i2][i3] << ",";等效
cout << endl;
}cout << endl;
} }
例項2.1:array替換普通陣列
constexpr size_t rows, cols, channels;
void view_array_1d();arr.at(2) = 3;
for (auto v : arr)cout << v << ",";
cout << endl;//1,2,3,
}
void view_array_2d()};等價
array, rows> arr2,,} };
arr2.at(0).at(2) = 13; arr2[0][3] = 14;
for (auto v : arr2) }
/* 11, 12, 13, 14,
21, 22, 23, 0,
31, 32, 33, 34,
*/
void view_array_3d(),,}},
//,//等效上面
} };
//array, rows>, channels>arr3 };//等效上面
arr3.at(0).at(1).at(2)=-1;//channel=0,row=1,col=2
arr3[0][1][2] = -1; //等效上面但不做邊界檢查
for (auto v : arr3)//cols
cout << endl;
}
cout << endl;
}} /*
11, 12, 13, 14,
21, 22, -2, 24,
31, 32, 33, 34,
41, 42, 43, 44,
51, 52, 53, 54,
61, 62, 63, 64,
*/
例項3:c語言陣列
#include#includeint main()
return 0;
}
3.備註:指標與陣列的區別
3.1.指標變數int *p:
1)是變數儲存資料是位址;可進行數值運算
2)*,運算子可用作陣列指標*a=a[0]=*(p+i)=p[0]=2
3.2.陣列變數int a[2]:
1)代表陣列最首元素位址;不可數值運算
2)陣列變數是特殊的指標,陣列變數本身表達位址p = a= &a[0] ;
3)陣列變數無需用取址符& ; a[i]==*(a+i);sizeof(a) == sizeof(int *)
4)實際上陣列是 const 指標不能被賦值
int a = ; int b;// int b實質上等價於int const *b;
b是常數不能被改變,初始化出來代表這個陣列就不能再改變
b = a; (錯誤) 陣列變數之間不可互相賦值。 int *q = a;是可以
C 教程第8講委託2(學習筆記)
第8講 委託2 快樂喬巴的部落格 張三李四王五在吃東西,這時候如果馬六陳七也加入進來吃東西,我們按照上面的邏輯就必須再寫2個靜態方法。如果有10個人吃東西,那麼我們就要增加10個靜態方法。如果100個人吃東西,就要.這樣的 很明顯非常的不合理。這時候我們就可以考慮對這些方法進行一些包裝,通過觀察每個...
c 第6次實驗 陣列操作
一 問題及 檔名稱 陣列操作 作 者 舒新 完成日期 2016 年 5 月 22 日 版 本 號 v1.0 對任務及求解方法的描述部分 使用陣列,排序,刪除和增加 輸入描述 1 0 0 問題描述 使用陣列,排序,刪除和增加 程式輸出 2 4 6 7 8 9 10 11 13 0 2 4 6 7 8 ...
C 第6次實驗 陣列操作
一 問題及 檔名稱 作 者 李憲 完成日期 2016年5月24日 版 本 號 v1.0 對任務及求解方法的描述部分 專案1 陣列操作 輸入描述 專案1 陣列操作 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序後完成以下操作 寫在乙個程式中 1。從鍵盤中輸入乙個數x,刪除a陣列...