预习(二)strlen sizeof staic extern 的定义理解与区别

来源:互联网 发布:java excel 小数 4位 编辑:程序博客网 时间:2024/06/16 16:32

  今天预习中对strlensizeof函数  “政权旗帜”static  “外来的和尚”ertern“进行详细的阅读和理解,书中没有用像课本那样的枯燥的方式解读,用一种幽默诙谐的方式反问我们,让我学习又多了些兴趣哈哈。不说没用的啦,下面是我整理的一些今天学习的内容。

1.strlen的详解

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从a首地址一直找下去,直到遇到'\0'停止。

char a[10];cout<<strlen(aa)<<endl; //结果是不定的

char a[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0

char a[10]="jun"; cout<<strlen(aa)<<endl; //结果为3(此处不完全正确,结果可能是不定的,如果编译器将其他的非零字符串放在a[10]的内存地址后,strlen结果还是不定的)

char a[5]="hello";cout<<strlen(a)<<endl; //结果5

2.什么是sizeof

sizeof()返回的是变量声明后所占的内存数,不是实际长度,并且sizeof不是函数,仅仅是一个取字节运算符,strlen是函数。sizeof操作符的结果类型是size t ,它在头文件中typedefunsignedint类型。该类型保证能容纳实现所建立的最大对象的字节大小。

3.Strlen sizeof 的区别

1)sizeof是取字节运算符(关键字),strlen是函数。

2)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

3)sizeof还可以用函数做参数,比如:

short f();

printf("%d\n",sizeof(f()));

输出的结果是sizeof(short),即2

4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5)大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。这就是sizeof(x)可以用来定义数组维数的原因

例:

char str[20]="0123456789";

long a=strlen(str); //a=10;

int b=sizeof(str); //b=20;

6)strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。

7)sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

8)当适用了于一个结构类型时或变量, sizeof返回实际的大小,

当适用一静态地空间数组, sizeof归还全部数组的尺寸。

sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸

如还有不懂详见百度.......

4.政权旗帜static

1)用static修饰局部变量,该变量便存放在静态数据区,其生命周期一般持续到整个程序执行结束为止。修饰过后只有作用域没有改变仍为局部变量。

2)修饰全局变量。在用static修饰全局变量后,该变量只在初次运行时进行初始化工作,且只进行一次。

3)修饰函数

就是改变了函数的作用域。

5.“外来的和尚”exten

Exten 是外部变量或外部函数,所以说是外来的和尚。

Exten 可以修饰变量和函数,表示该变量或者函数在其他地方被定义

在任何函数体外声明或定义变量时,不加Extern可能是定义也可能是声明,但加了extern肯定是声明;如果不想让其他源文件链接到,则需要使用static关键字。

 在函数体内声明,在函数体内部不能定义外部变量,使用其他原文件定义变量时,必须使用extern关键字,因为在函数体内默认为局部变量。

0 0
原创粉丝点击