错题整理(1)

1.  charc = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。

2.  10*a++ 中a先进行乘法运算再自增(笔试中经常喜欢出这类运算符优先级容易混淆的输出问题)。

3.  const和static的作用 
太常见的问题了,下面给出一个较详细的参考答案:

static关键字:

1)函数体内static变量的作用范围为函数体。不同于auto变量。该变量的内存只被分配一次。因此其值在下次调用时仍维持上次的值。

2)在模块内的static全局变量可以被模块内的所有函数访问。但不能被模块外的其他函数访问。

3)在模块内的static函数只可被这一模块内的其它函数调用。这个函数的使用范围被限制在声明它的模块内。

4)在类中的static成员变量属于整个类所有,对类的所有对象只有一份复制。

5)在类中的static成员函数属于整个类所有,这个函数不接受this指针,因而只能访问类的static成员变量。

const关键字:

1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化。因为以后就没有机会再改变它了。

2)对指针来说,可以指定指针的本身为const,也可以指定指针所指向的数为const。或二者同时为const。

3)在一个函数的声明中,const可以修饰形参,表明它是一个输入参数。在函数内不能改变其值。

4)对于类的成员函数,若指定其为const类型。则表明其是一个常量函数。不能修改类的成员变量。

5)对于类的成员函数,有时候必须指定其返回值为const类型。以使得其返回值不为“左值”。

4.  易误解:如果inta[5], 那么a与&a是等价的,因为两者地址相同。 
解答:一定要注意a与&a是不一样的,虽然两者地址相同,但意义不一样,&a是整个数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。

5.程序输出题:

 charstr1[] = "abc";

 charstr2[] = "abc";

 constchar str3[] = "abc";

 constchar str4[] = "abc";

 constchar *str5 = "abc";

 constchar *str6 = "abc";

 char*str7 = "abc";

 char*str8 = "abc";

 cout<< (str1 == str2) << endl;

 cout<< (str3 == str4) << endl;

 cout<< (str5 == str6) << endl;

 cout<< (str7 == str8) << endl;

输出:0 0 1 1 
说明:输出str1~str8的地址为:

0x23aa80 
0x23aa70 
0x23aa60 
0x23aa50 
0x23aa48 
0x23aa40 
0x23aa38 
0x23aa30

输出str1~str8内容“abc”的存储地址为:

0x23aa80 
0x23aa70 
0x23aa60 
0x23aa50 
0x100403030 
0x100403030 
0x100403030 
0x100403030

可以发现str1~str4中的内容是存在栈上,地址各不相同,而str5~str8的内容都是存储在常量区,所以地址都相同。

注意:

char *str ="abc";

printf("%p\n",str1); 

cout<< &str1 << endl;

上面打印的是字符串 “abc”的地址,下面打印的是 str1 变量的地址。

6.在C++中参数传递只有值传递和引用传递,地址传递指的是指针传递,而指针传递本质上也是值传递(指针值)

7.假设x=9981,下面函数的返回值是?

    int func(x)

{

    int countx=0;

    while(x)

    {

        countx++;

        x=x&(x-1);

    }

    return countx;

}

先转2进制为10011011111101,每次x&(x-1)会让原来的1(从低位到高位依次)变为0。一共10个1,10次循环之后x为0,退出循环。

8.   32位系统    64位系统  (单位Bytes)  

char         1       1

short          2        2

int         4        4 

指针             4           8

long           4        8

float        4         4

double             8       8

猜你喜欢

转载自blog.csdn.net/ys5858588/article/details/81167608
今日推荐