[C++学习]获取数组,字符串长度

获取数组长度

直接看代码吧
要注意的是函数传入数组的时候会当成一个指针看待,所以输出结果不正常,但是使用类模板则可以成功获取长度,在main()函数中直接写也可以成功获取

#include<iostream>
using namespace std;
int getlen(int a[]);
//使用类模板
template <class T>
int getArrayLen(T& array)
{
    return (sizeof(array) / sizeof(array[0]));
}
int main(){
    int a[]={1,2,3,4,5,6};
    cout<<getlen(a)<<endl;
    cout<<"--------"<<endl;
    cout<<(sizeof(a)/sizeof(a[0]))<<endl;//成功
    cout<<"--------"<<endl;
    cout<<getArrayLen(a)<<endl;
    cout<<"--------"<<endl; 
    int *b=new int[3];
    for(int i=0;i<3;i++)
    {
        b[i]=i*10;
    }
    cout<<getlen(b)<<endl;//使用动态数组仍失败
    delete []b;
    char c[]={'a','b','c'};
    cout<<"--------"<<endl; 
    //字符数组成功
    cout<<(sizeof(c)/sizeof(c[0]))<<endl;
    cout<<"--------"<<endl;
    cout<<getArrayLen(c)<<endl; 
}

int getlen(int a[])
{
    cout<<sizeof(a)<<endl;
    cout<<sizeof(a[0])<<endl;   
    return (sizeof(a)/sizeof(a[0]));
    //函数传入数组的时候会当成一个指针看待,所以输出结果不正常
} 

运行结果如下
这里写图片描述

获取字符串长度

sizeof()

(转载自c++中sizeof()运算符的用法
1. 定义

sizeof是一个操作符(operator)。

其作用是返回一个对象或类型所占的内存字节数。

  1. 语法

sizeof有三种语法形式:

1) sizeof (object); //sizeof (对象)

2) sizeof object; //sizeof 对象

3) sizeof (type_name); //sizeof (类型)

对象可以是各种类型的变量,以及表达式(一般sizeof不会对表达式进行计算)。

sizeof对对象求内存大小,最终都是转换为对对象的数据类型进行求值。

sizeof (表达式); //值为表达式的最终结果的数据类型的大小

strlen()

strlen(…)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。
当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’。

length()

返回字符串长度

下面是代码

#include<iostream>
using namespace std;
int main(){
    string x1="abc";
    string x2="abcdef";
    string x3="bcdefhij";
    char y1[]="abcde";
    cout<<sizeof(x1)<<endl;//返回字符串长度
    cout<<x1.length()<<endl;
    cout<<x1.size()<<endl; 
    cout<<"---------"<<endl;
    cout<<sizeof(x2)<<endl;
    cout<<x2.length()<<endl;
    cout<<x2.size()<<endl;
    cout<<"---------"<<endl;
    cout<<sizeof(x3)<<endl;
    cout<<x3.length()<<endl;
    cout<<x3.size()<<endl;
    cout<<"---------"<<endl;
    cout<<strlen(y1)<<endl;
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hhmy77/article/details/80158159