6

笔试 C/C++ 9.27牛客

 2 years ago
source link: https://blog.csdn.net/weixin_44576259/article/details/120501387
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

结构体类型只有一种。 ()

因为C/C++定义一个结构(struct)事实上定义的是一种类型
而不是一个实例对象
struct S { int i; };
S s; //这是C++写法;C里的写法是 struct S s;
这里定义的结构体S是一个类型,所以称为结构体类型
再用这个类型定义一个实例对象s

有关下面程序说法正确的是( )

(注:└┘代表空格)
复制代码

int main()
{
char s[6]= “abcd”;
printf(""%s"\n", s);
return 0;
}

“abcd”

因为像 " 这类的符号自己想想,是不是输不出来,所以要加一个 \ ,这个叫转义符号," " “这样子就能输出 " 了(第一个双引号和第三个双引号对应,输出第二个双引号)
" 代表一个双引号"符号;
“”%s”\n" 输出 "s[6]"换行。

若有说明语句:char c=’\72’;则变量c()。

包含1个字符

【解释】因为’\72’是转义字符,表示其ASCⅡ码为八进制数72的字符,即’:’字符

以下程序运行后的输出结果是( )

int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}

答案为0,0

&&需要两方同时成立,前者n=b<a为0后面的m=a就不再执行所以m为初始值0,

有如下C语言程序段:

for(k=0; k<1000; k++)
a[k] = a[k]+32;
若数组a及变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小为1KB、块大小为16B,该程序段执行前Cache为空,则该程序段执行过程中访问数组a的Cache缺失率约为 。

12.5%

分析语句“a[k]=a[k]+32”:首先读取a[k]需要访问一次a[k],之后将结果赋值给a[k]需要访问一次,共访问两次。第一次访问a[k]未命中,并将该字所在的主存块调入Cache对应的块中,对于该主存块中的4个整数的两次访问中只在访问第一次的第一个元素时发生缺失,其他的7次访问中全部命中,故该程序段执行过程中访问数组a的Cache缺失率约为1/8(即12.5%)。

以下哪个属于在预编译阶段执行____,以下哪些指令属于操作符___

a:malloc;
b:++;
c:#pragma;
d:sizeof;
e:#define

预编译c,e 操作符b,d

带#的肯定是预编译指令了,所以c和e预编译;sizeof为操作符,与+,-,这一类的一样,不是神马函数,malloc为函数,参数为字节数,返回一个void 指针。

有函数原型void fun4( int & );,在下列选项中,正确的调用是( )。

int b = 100; fun4( b );

void funcA(int& a,int& b)//这是引用
 
{
 
  //TODO
 
}
 
  
 
void funcB(int* input)//这是要用取地址
 
{
 
  //TODO
 
}
 
  
 
int main()
 
{
 
    int a = 1;
 
    int b = 2;
 
    funcA(a, b);//引用,调用函数的时候不需要取地址符
 
      
 
    int c = 3;
 
    funcB(&c);//取地址,调用函数的时候,因为函数要求输入为指针,因此要取地址
 
    return 1;
 
}

若定义了以下函数:

void f ( )
{
*p=(double ) malloc (10sizeof (double));

}
P是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p
的正确定义应当是()。

double**p

动态内存分配函数调用的返回值是所分配内存区域的首地址,而赋值语句的左边是 * p,则说明 * p是一地址变量,即一级指针变量,所以p就应是二级指针变量,又因为malloc前面有强制类型转换符double*,因此指针变量应为double型。

在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则( )。

称为函数的间接递归调用

直接递归调用就是在函数a(或过程)中直接引用(调用)函数a本身。
间接递归调用就是在函数a(或过程)中调用另外一个函数b,而该函数b又引用(调用)了函数a。

假设有说明 int a=0; double x=5.16;,则在以下语句中,( )属于编译错误。

a=a%x;

%要求两边都是整数,如果你非要一个整数%另外一个非整数的可以用强制类型转换把它装换成整形。
x=x/a;选项可能比较干扰,虽然从小就被教育分母不能为0,但事实上,即使分母为0 ,编译器也不会编译错误,输出结果为inf,表示无穷大。所以根据题目要求,会出现编译错误的只有a=a%x;

由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?

1.编辑:也就是编写C/C++程序。
2.预处理:相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。
3.编译:将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。
4.链接:通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。 链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够***作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。

C++11支持使用or代替||符号

用于处理字符串流的是( )。

strstream

strstream:字符流;iostream:输入输出流;fstream:文件流
#include
#include
string a;
int b=55;
strstream ss;
ss<<b;
ss>>a;
//a中就是string类型的55;
2.i/o输入输出流,I/O文件操作
3.fstream也是文件读取

以下程序能对两个整型变量的值进行交换。以下正确的说法是( )

main( )
{
swap(int p,int q);
int a=10,b=20;
printf("(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("(2)a=%d,b=%d\n",a,b);}
swap(int p,int q){
int t;
t=p;p=q;q=t;
}

修改:
定义swap(int &p,int &q)
调用swap(a,b)。

多态类中的虚函数表建立在()

是在编译时创建的的虚函数表,编译器对每个包含虚函数的类创建一个虚函数表(vtable),在vtable中,放置这个类的虚函数地址。编译器另外还为每个特定类的对象提供了一个虚表指针(即vptr),这个指针指向了对象所属类的虚表。
在程序运行时,根据对象的类型去初始化vptr,从而让vptr正确的指向所属类的虚表,从而在调用虚函数时,就能够找到正确的函数。

下面哪些选项与Objective-C的内存管理无关?

delete

Objective-C内存管理总结,参考https://blog.csdn.net/weixin_34130269/article/details/94510766


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK