面试常见题之sizeof与strlen的区别

     前段时间一直在忙论文和专利的事情,没时间去看一些c++/数据结构等笔试面试要用的知识,虽说做科研一直用的是c语言,但是平时用的哪些知识太狭隘了,主要集中在一些聚类算法上面,并没有多少时间去探讨一些c++/c底层的一些东西,现在马上要找工作了,着手看了一些东西,现在和大家分享一下,当然,我不是计算机专业的,也不是软件专业的,在叙述我的观点的时候,难免会有一些描述不够完整或者正确的地方,真心希望大家可以指点一下。

  从今天起呢 我尽量做到每天都更新我的博客,写不是目的,目的是和大家一起探讨,探讨才有进步嘛!

  sizeof和strlen的区别:

1 sizeof是运算符,而strlen是函数;

2 sizeof的用法是sizeof(参数),这个参数可以是数组,指针,类型,对象,甚至是函数,其值在编译的时候就计算好了,而strlen的参数必须是字符型指针(char*),其值必须在函数运行的时候才能计算出来;

3 sizeof的功能是获得保证能容纳实现的建立的最大对象的字节的大小,而strlen的功能是返回字符串的长度,切记这里的字符串的长度是包括结束符的;

4 当数组作为参数传递给函数的时候,传的是指针,而不是数组,传递数组的首地址;

看下面的例子:

char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);


则  a = 10;

      b = 20;

这个例子相信大家都能看明白,strlen返回的字符串的长度,sizeof返回建立的最大对象的字节的大小,因此a = 10,b = 20;

看第二个例子:

int fun(int arry[])
{
	return sizeof(arry);
}
void main()
{
	int arry[]={1,2,3,4,5};
	cout<<fun(arry);
}

则最后输出的结果为多少呢?

正确的结果应该为4,而不是5,前面说了当一个数组作为参数传递给函数的时候,传递的是指针,而不是数组,也就是说在上面的函数中,传给函数的参数是一个指针,我们知道任何类型的指针的大小都是占4个字节,所以sizeof(arry)应该是4个字节,故最后的结果应该是4

再看下面一个例子

char* str = "0123456789";
int a = sizeof(str);
int b = sizeof(*str);

a = 4;

b =1;
这个想必大家都明白了,sizeof(str),这个str是指针,而sizeof(*str)中的参数*str则是第一个字符,因此大小应该为1.

猜你喜欢

转载自blog.csdn.net/songzhaorong/article/details/39010337
今日推荐