c/c++ 數組 知識點 1,數組的聲明和初始化,對應代碼里的test1和test2 2,char數組,對應代碼里的test3 3,數組不可以拷貝和複製,對應代碼里的test4 4,指針數組, 數組的指針, 數組的引用,指針數組的引用,對應代碼里的test5 5,數組的範圍for用法,對應代碼里的t ...
c/c++ 數組
知識點
1,數組的聲明和初始化,對應代碼里的test1和test2
2,char數組,對應代碼里的test3
3,數組不可以拷貝和複製,對應代碼里的test4
4,指針數組, 數組的指針, 數組的引用,指針數組的引用,對應代碼里的test5
5,數組的範圍for用法,對應代碼里的test6
6,用size_t作為下標的類型,對應代碼里的test6
#include <iostream>
#include <string>
#include <cstddef>
using namespace std;
int main(){
//test1 聲明時必須指定數組的大小
/*
unsigned cnt = 42;
constexpr unsigned sz = 42;
int arr[10];
int *parr[sz];
string bad[cnt];
bad[23] = "aaa";
cout << bad[23] << endl;
*/
//test2 初始化
/*
const unsigned sz = 3;
int ia1[sz] = {1,2,3};//含有3個元素的數組,元素值:1,2,3
int a2[] = {1,2,3};//含有3個元素的數組,元素值:1,2,3
int a3[5] = {1,2,3};//含有5個元素的數組,元素值:1,2,3,0,0
cout << a3[3] << a3[4] << endl;
string a4[3] = {"ni", "go"};//含有3個元素的數組,元素值:"ni","go",""
cout << a4[2] << endl;
//int a5[2] = {1,2,3};//錯誤
*/
//test3 char數組
/*
char a1[] = {'a','b','c'};//列表初始化,沒有尾部\0
cout << a1 << endl;//因為沒有尾部的\0,所以會一直列印到\0為止
char a2[] = {'a','b','c', '\0'};//列表初始化,有尾部\0
cout << a2 << endl;
char a3[] = "abc";//自動添加尾部的\0
cout << a3 << endl;
//char a4[3] = "abc";//錯誤,指定了大小為3,無法在c後面加\0
*/
//test4 數組拷貝和賦值
/*
int a[] = {1,2,3};
//int a1[] = a;//不能拷貝數組
int a2[] = {1,1,1};
//a2 = a;//不能用數組給數組賦值
*/
//test5 指針數組, 數組的指針, 數組的引用,指針數組的引用
/*
//指針數組
int* pt[10];//ptr指向含有10個整型指針的數組
//數組的指針
int (*parr)[10];//parr指向一個含有10個整數的數組,應用於二維數組
int br[2][10];
parr = br;
if(parr + 1 == &br[1]){
cout << "==" << endl;
parr[0][0] = 10;
cout << br[0][0] << endl;
}
int arr[10];
//數組的引用
int (&af)[2][10] = br;
af[0][1] = 123;
cout << br[0][1] << endl;
int (&arrRef)[10] = arr;
arrRef[0] = 100;
arrRef[1] = 10;
cout << arrRef[0] << "," << arrRef[1] << endl;
//指針數組的引用
int* (&ar)[10] = pt;
int a = 5;
ar[0] = &a;
*ar[0] = 500;
cout << a << endl;
*/
//test6 數組的範圍for用法
int ar[5] = {};
for(auto &s : ar){
s = s + 1;
}
//用size_t作為下標的類型,包括在cstddef頭文件里
size_t idx = 1;
ar[idx] = 100;
for(auto s : ar){
cout << s << ",";
}
cout << endl;
}