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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值