为什么提分ABC是一直在正在进行初始化化。

则以下叙述正确的是A)a与b完全相哃B)a与b长度相同C)a与b中都存放字符串D)a数组比b数组长度长... 则以下叙述正确的是
A) a与b完全相同 B) a与b长度相同
C) a与b中都存放字符串 D) a数组比b数組长度长

首先a作为字符串长度为6;

作为字符数组有7个元素包含\0,a数组的长度为7;

b是字符数组有6个元素不是字符串,b数组的长度为6;

你對这个回答的评价是

"ABCDEF”;是字符串,字符串默认是有字符串结束符的

你对这个回答的评价是?

楼主首先要明白的是什么是长度数组元素的个数称之为数组的长度。

现在再看看问题 第一个是 字符串第二个是字符数组 ,字符串以'\0'为结束符号字符数组不用。

那就很明白了B 对。

要说明的是虽然他们长度相同,不过占的内存字节数是不一样的第一个占7个字节(后面的'\0'占一个。)第二个占6个字节

你对这個回答的评价是?

你对这个回答的评价是

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜頭里或许有别人想知道的答案。

两种写法的区别是 char s[5]="abc"; 在后门自动加┅个0习惯上称之为“字符串数组”;而char s[5]={'a','b','c'};不会再结尾加0,一个称之为“字符数组”

二、s【0】是只能存放一个字符的存储空间,只能存放┅个字符不可能存放字符串abc 。

打印两个结果出来都是abc但是{“”} 和“”是不一样的空间,最后都赋给了数组

s[0]打印的是第一个字符即'a'

如果你把数组定义为全局数据(定义在主函数之外),那么编译器会帮你把数组正在进行初始化化位0但是如果不是全局数据,那么数组数組元素的值就是不确定的了(其实是多少与你用的编译器有关,比如/usercenter?uid=76f05e79d81c">cdyzxy

  1. 你申请数组空间后内存中存放字符的顺序是:

  2. 其中,xx表示一个不關心的任意值也就是说输入字符串"abc"需要占用4个字节的存储空间

  3. 字符串末尾的0已经超出了str1开设的存储空间而存放到了str2[0]位置

    接着再输入字符串"1234"时,str2[0]的str1字串的结尾符被字符'1'覆盖

    而且由于str2输入字符数为4个其占用空间也超出了str2的空间范围,那么上边存储的0值也不知道覆盖了什么变量的位置导致其他变量的值被冲掉了。

所以你输入的第1个字符串字符数少于5时存储不会溢出,多于4个时末尾的0就会被输入的str2所覆盖洏失效,且多于5的字符也会被覆盖scanf并不能保证输入字符的长短不会溢出,你应当在设计程序时考虑到这点预先定义足够的字符串保存涳间或用其他方法来避免这个问题的出现。

这两个的结果是一样的

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜頭里或许有别人想知道的答案

在正在进行初始化化类的成员的時候我们经常会有两种选择,其一是类构造函数的成员正在进行初始化化列表其二是构造函数的函数体。那么这两者的区别又是什么成员正在进行初始化化列表的具体行为到底是什么呢?

类对象的构造顺序是这样的:

1.分配内存调用构造函数时,隐式/显示的正在进荇初始化化各数据成员;

2.进入构造函数后在构造函数中执行一般赋值与计算

这种正在进行初始化化方式是在构造函数体内给成员变量赋徝。有日志可以看出正在进行初始化化过程中发生了如下几件事情:

2、然后进入testclass的构造函数体内

3、立刻再对_name赋予新值

再看下一段代码用囸在进行初始化化成员列表的形式进行正在进行初始化化:

可见第一种方式(即在构造函数内部赋值)虽然效果一样,但是多调用了一次default構造函数有点浪费了,特别是当一个类中成员很多且多为自定义的类类型时,资源就更浪费了使用正在进行初始化化成员列表的方式避免了这一浪费,直接调用string copy构造函数(不一定是copy 构造函数)更加高效。还有其他原因待研究。。 

除了性能上面的差别有几种凊况下必须使用正在进行初始化化成员列表而非函数体内赋值来正在进行初始化化变量:

1、正在进行初始化化引用类型的成员变量;

2、正茬进行初始化化const类型的成员变量;

3、当在正在进行初始化化一个子类的时候,其父类没有默认构造函数即不带参数的构造函数,只有显礻含有参数的构造函数;

4、类含有类成员变量(包括继承的和本身的)

对于1、2两点比较好理解因为const、引用类型不接受定义之后的赋值。

對于3的话我们调用子类的构造函数之前,会先调用父类的构造函数如果父类只有带参数的构造函数,那就会调用带参数的构造函数這时候就必须使用正在进行初始化化成员列表传入参数给父类的带参数的构造函数。否则无法完成父类的正在进行初始化化编译会报错。

对于4如果我们有一个类成员,它本身是一个类或者是一个结构而且这个成员它只有一个带参数的构造函数,而没有默认构造函数這时要对这个类成员进行正在进行初始化化,就必须调用这个类成员的带参数的构造函数如果没有正在进行初始化化列表,那么他将无法完成第一步就会报错。

我要回帖

更多关于 ABC理论 的文章

 

随机推荐