天天看點

C++Primer閱讀筆記-第4章-數組

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