c/c++ 數組和指針 知識點 1,數組就是指針,對應代碼里的test1 2,用auto聲明,得到的是指針,對應代碼里的test2 3,用decltype聲明,得到的不是指針 ,對應代碼里的test3 4,用指針模擬end ,對應代碼里的test4 5,標準庫函數std::begin,std::en ...
c/c++ 數組和指針
知識點
1,數組就是指針,對應代碼里的test1
2,用auto聲明,得到的是指針,對應代碼里的test2
3,用decltype聲明,得到的不是指針 ,對應代碼里的test3
4,用指針模擬end ,對應代碼里的test4
5,標準庫函數std::begin,std::end,對應代碼里的test5
6,ptrdiff_t和size_t,ptrdiff是數組下標相加減的值的類型,size_t是數組下標的類型,對應代碼里的test6
7,數組的下標可以是負值,標準庫的string,vector的下標也可以是負值,對應代碼里的test7
8,用數組初始化vector,註意生成的vector里的元素不包括第二個參數,對應代碼里的test8
#include <iostream>
#include <vector>
using namespace std;
int main(){
//test1 數組就是指針
/*
string ar[] = {"aa","bb"};
string* p = ar;
*p = "cc";
string* p1 = &ar[1];
*p1 = "dd";
for(auto s : ar){
cout << s;
}
cout << endl;
*/
//test2 用auto聲明,得到的是指針
/*
int ia[] = {1,2,3,5};
//ia1為整數指針
auto ia1(ia);
*ia1 = 9;
auto ia2(&ia[3]);
*ia2 = 8;
for(auto s : ia){
cout << s << ",";
}
cout << endl;
*/
//test3 用decltype聲明,得到的不是指針
/*
int ia[3];
decltype(ia) ia3 = {2,3,4};
//ia3 = &ia[0];//編譯錯誤
ia3[2] = 9;
for(auto s : ia3){
cout << s << ",";
}
cout << endl;
*/
//test4 用指針模擬end
/*
int arr[] = {0,1,2};
int* end = &arr[3];
for(int* beg = arr;beg != end; ++ beg){
cout << *beg;
}
cout << endl;
*/
//test5 標準庫函數std::begin,std::end
/*
int arr[] = {0,1,2};
int* beg = std::begin(arr);
//int* end = &arr[3];
int* end = std::end(arr);
for(;beg != end; ++ beg){
cout << *beg;
}
cout << endl;
*/
//test6 ptrdiff_t和size_t
//ptrdiff是數組下標相加減的值的類型,size_t是數組下標的類型
/*
int arr[] = {1,2,3,4,5};
int* b = std::begin(arr);
int* e = std::end(arr);
ptrdiff_t juli = e - b - 1;
cout << juli << endl;
size_t sz = juli;
cout << arr[sz] << endl;
*/
//test7 數組的下標可以是負值,標準庫的string,vector的下標也可以是負值
/*
int ia[] = {1,2,3,4,5};
int* p = &ia[2];
int j = p[1];//相當於*(p + 1),也就是ia[3]
cout << j << endl;
int k = p[-2];//相當於*(p - 2),也就是ia[0]
cout << k << endl;
string s("abcde");
char* p1 = &s[2];
cout << p1[-1] << endl;
vector<int> v{1,2,3,4};
int* p2 = &v[3];
cout << p2[-2] << endl;
*/
//test8 用數組初始化vector,註意生成的vector里的元素不包括第二個參數
/*
int ia[] = {0,1,2,3,4,5,6};
vector<int> v(std::begin(ia), std::end(ia));
for(auto s : v){
cout << s << ",";
}
cout << endl;
vector<int> v1(ia + 1, ia + 4);
for(auto s : v1){
cout << s << ",";
}
cout << endl;
*/
}