4.1.1 數組的定義和初始化
數組的維數必須使用值大于等于1的常量表達式定義(隻能包含整形面值常量,枚舉常量)。
非const變量以及要運作階段才知道其值的const變量都不能定義數組維數。
int GetSize()
{
return 10;
}
int main()
{
int i=10;
//int arr[i];//error: 應輸入常量表達式
const int i1=GetSize();
//int arr1[i1];//error: 這裡i1需要運作時才知道其值,是以不能作為數組的維數
//int arr1[GetSize()];//error: 這裡也是運作時才知道值
const int i2=10;
int arr2[i2];//ok
int arr3[10];//ok
system("PAUSE");
return 0;
}
在函數體外定義的内置數組,其值均初始化為0
在函數體内定義的内置數組,其元素無初始化(測試vs2010中一直指派為一個很小的負值)
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
//在函數體外定義的内置數組,其元素均初始化為0
int arr[10];
int main()
{
int arr1[10];
cout<<"周遊arr:"<<endl;
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
//這裡arr的元素都是初始值0
cout<<"第"<<i<<"個元素為"<<arr[i]<<endl;
}
cout<<"周遊arr1:"<<endl;
for(int i=0;i<sizeof(arr1)/sizeof(arr1[0]);i++)
{
//
cout<<"第"<<i<<"個元素為"<<arr1[i]<<endl;
}
system("PAUSE");
return 0;
}
2.特殊的字元數組
這裡需要注意是字元的空字元(結束字元串)。
#include<iostream>
#include<string>
using std::cout;
using std::endl;
using std::cin;
using std::string;
int main()
{
char chr[]={'a','b','c'};//這裡沒有字元串結束符\0,數組的維數是3
cout<<sizeof(chr)/sizeof(chr[0])<<endl;//輸出3
cout<<"-------------1--------------"<<endl;
char* chr1="abc";//這裡系統添加了\0,數組維數是4
cout<<sizeof(chr1)/sizeof(chr1[0])<<endl;//輸出4
for(int i=0;i<sizeof(chr1)/sizeof(chr1[0]);i++)
{
cout<<chr1[i]<<endl; //最後一次輸出是空白
}
cout<<"-------------2--------------"<<endl;
char chr2[]={'a','b','c','\0'};//手動添加結束符 \0,數組維數是4
cout<<sizeof(chr2)/sizeof(chr2[0])<<endl;//輸出4
cout<<"-------------3--------------"<<endl;
//char chr3[3]="abc";//編譯錯誤,這裡abc\0需要4個空間的數組,而我們隻給了3個
char chr4[4]="def";
cout<<sizeof(chr4)/sizeof(chr4[0])<<endl;//輸出4
for(int i=0;i<sizeof(chr4)/sizeof(chr4[0]);i++)
{
cout<<chr4[i]<<endl; //最後一次輸出是空白
}
cout<<"-------------4--------------"<<endl;
//閑的蛋疼,試試string類型
string str("abc");
cout<<str.size()<<endl;//這裡輸出3
cout<<sizeof(str)/sizeof(str[0])<<endl;//輸出4,說明string自動添加了\0來結束字元
//再來試試手動添加\0給string對象
string str1("abc\0");
cout<<str.size()<<endl;//這裡size沒有算上我們添加的\0,輸出3
cout<<sizeof(str)/sizeof(str[0])<<endl;//由于手動添加了\0,是以這裡沒有再自動添加\0,輸出4
system("pause");
return 0;
}
3.數組不能直接複制和指派
一個數組不能用于另外一個數組的初始化,也不能将一個數組指派給另外一個數組
int arr[]={1,2,3};
int arr1[3];
arr1=arr;//ERROR 不能直接給數組指派
4.數組的下标
之前的vector下标類型是vector::size_type,下标從0開始,數組的下标類型則是size_t,下标也是從0
開始
#define arr_size 4
int main()
{
int arr[arr_size]={1,2,3,4};
for(size_t i=0;i<arr_size;i++)
{
cout<<arr[i]<<endl;
}
system("pause");
return 0;
}
轉載于:https://www.cnblogs.com/kennyMc/archive/2012/11/21/2781718.html