牛客网-C++-2020.9.2

1. for循环语句能够被改写成(D)语句

A. 复合 B. if C. switch D. while

解析:

for循环可以写成while控制循环的次数,同时也可以被改写成do while语句

2. 以下程序的输出结果是(you&me)。

void main () 
{ 
char arr[2][4];
strcpy (arr[0],"you");strcpy (arr[1],"me"); 
arr[0][3]=’&’; 
printf("%s 
",arr);
} 

解析:

【解释】因为arr是一个2行4列的二维数组,每一行可以存放最多三个字符的字符串。 

执行strcpy(art[0],"you”);后则将字符串"you”放置在数组arr的第一行上,即a[0][0]=’y’,

a[0][1]=’o’,a[0][2]=’u',a[0][3]=’’(字符串结尾符),执行strcpy(arr[1],”me”);后则将字符 

串”me”放置在数组arr的第二行上,即a[1][0]=’m',a[1][1]=’e’,a[1][2]=’’(字符串结尾符), 

由于二维数组在内存中是以行序存放的,执行arr[0][3]=’&’;后,第一行与第二行将视为 

一个字符串"you&me”,而数组名则是该字符串的首地址。所以正确答案是A。

3. c++声明const int i,是在哪个阶段做到i只可读的?

答:编译

解析:const说明变量是常量,常量存储在常量区,在编译时就直接将其替换成相应的引用。

const int i = 10; 编译时候就和变量i做了对应,后面程序用到i的时候,直接从编译器的符号表中取10,不会再查找内存。在c++中 const修饰的变量是常量,分配在全局区的常量区,而我们的全局区和代码区在编译完了就已经确定,只有栈区和堆区才是运行是分配的。表示变量i是一个常变量,在编译阶段,程序后面只要出现i这个标识符都会被用10进行替换。这一点类似于宏,#define i 10.const用来说明所定义的变量是只读的。 这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。 

源代码到可执行文件的过程:

源代码->预处理->编译->优化->汇编->链接->可执行文件

4. 运算符重载以后,其优先级和结合性都不能改变

解析:

运算符重载规则: 
    重载的功能应当与原功能相似,不能改变原运算符的操作个数,同时至少要有一个操作数的类型是自定义类型。重载之后运算符的优先级和结合性都不会改变,并且要保持原运算符的语法结构。参数和函数值类型都可以重新说明。
 
5. 某32位系统下, C++程序void *p = malloc( 100 ); sizeof (p) = ?
解析:4,指针的大小依赖于平台,32位一般为4,64位一般为8,总是与int保持一致。
 
6. 在C语言中,以下代码执行之后,*p的值为()
void func(int *p)
{
    static int num = 4;
    p = #
    (*p)--;
}
int main()
{
    int i = 5;
    int *p = &i;
    func(p);
    printf("%d", *p);
    return 0;
}
解析:尽管函数的形参是指针,但是它仍然是“值传递”
一方面,函数本身没有任何返回,另一方面,函数只是对p的值的处理,并非p的地址。
函数调用时,p作为实参,函数中也给p重新复制,函数确实使静态局部变量num的值减一,但是函数执行完,返回到主函数中,p中的仍然是i的地址。
 
7. 面向对象的程序设计的优点包含:
答:可重用性、可扩展性、易于维护与管理、简单易懂,面向对象的三大特性:多态、继承、封装。
 
8. 关于数组和指针的区别描述正确的是?
A. 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。
B. 用运算符sizeof可以计算出数组的容量(字节数)。
C. 指针可以随时指向任意类型的内存块。
D. 用运算符sizeof可以计算出指针所指向的内容的容量(字节数)。
解析:B
A是在堆上创建动态数组;
B中sizeof(数组名)就是数组的容量
C中const指针不可以,char* const p;是指针常量
D中char* str = "hello";sizeof(str)不能计算出内容的容量,只是指针的容量。
 
 
 
 
原文地址:https://www.cnblogs.com/lbwBH/p/13605302.html