字符数组、sizeof()、strlen()

sizeof():运算符,在编译的时候就计算好了,计算的是分配给数组所占的内存大小
strlen():函数,在运行时才能计算,计算的是不包含空字符的字符串长度

    char arr0[] = "hello \0########";
    cout << sizeof(arr0) << endl;   //16,推导出arr0数组占16个字节,包含结尾隐式的"\0"
    cout << strlen(arr0) << endl;   //6,strlen()计算从开始到遇见第一个"\0"为止之间的字节大小,不包括"\0"

    char arr1[20] = "hello \0########";
    cout << sizeof(arr1) << endl;   //20,数组大小预设20
    cout << strlen(arr1) << endl;   //6,同上

    char arr2[] = "word";
    cout << sizeof(arr2) << endl;   //5,推导出arr2数组占5个字节,包含4个字符和结尾隐式的"\0"
    cout << strlen(arr2) << endl;   //4,同上
    strcat(arr1, arr2);
    cout << arr1 << endl;   //hello word

    char *arr3 = "hello \0########";
    //这样写会报警告:deprecated conversion from string constant to 'char *'
    //char *背后的含义是:给我个字符串,我要修改它。而理论上,我们传给函数的字面常量是没法被修改的。比较和理的办法是把参数类型修改为const char *。
    cout << sizeof(arr3) << endl;   //4,sizeof()此时计算的是arr3首地址所占的字节数
    cout << strlen(arr3) << endl;   //6,同上

    cout << "------------------------------------------" << endl;

    char a1[] = {'C','+','+'};
    cout << sizeof(a1) << endl;   //3
    cout << strlen(a1) << endl;   //不确定。由于该字符数组初始化没有'\0',巴拉巴拉。。。

    char a2[] = {'C','+','+','\0'};
    cout << sizeof(a2) << endl;   //4
    cout << strlen(a2) << endl;   //3

    char a3[] = "C++";
    cout << sizeof(a3) << endl;   //4
    cout << strlen(a3) << endl;   //3

    char a4[10] = "C++";
    cout << sizeof(a4) << endl;   //10
    cout << strlen(a4) << endl;   //3

    char a5[10] = "";
    cout << sizeof(a5) << endl;   //10
    cout << strlen(a5) << endl;   //0

    char * p="string1";
    char a6[]="string2";
    //p是一个指向char变量的指针,a6则是一个char数组(字符数组)
    //char*是变量,值可以改变, char[]是常量,值不能改变!
    //p是一个char型指针变量,其值(指向)可以改变;
    //a6是一个char型数组的名字,也是该数组首元素的地址,是常量,其值不可以改变
    cout << sizeof(p) << endl;   //4
    cout << strlen(p) << endl;   //7
    cout << sizeof(a6) << endl;   //8
    cout << strlen(a6) << endl;   //7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值