c 面试题

时间:2020-12-19 09:23:32 面试问题 我要投稿

c 面试题

1、运行下图中C代码,输出的结果是什么?

c 面试题


[cpp]
int main(int argc, char** argv[]) 

    char str1[] = "hello world"; 
    char str2[] = "hello world"; 
  
    char* str3 = "hello world"; 
    char* str4 = "hello world"; 
  
    if(str1 == str2) 
        printf("str1 and str2 are same.\n"); 
    else 
        printf("str1 and str2 are not same.\n"); 
  
    if(str3 == str4) 
        printf("str3 and str4 are same.\n"); 
    else 
        printf("str3 and str4 are not same.\n"); 
  
    return 0; 

int main(int argc, char** argv[])
{
    char str1[] = "hello world";
    char str2[] = "hello world";
 
    char* str3 = "hello world";
    char* str4 = "hello world";
 
    if(str1 == str2)
        printf("str1 and str2 are same.\n");
    else
        printf("str1 and str2 are not same.\n");
 
    if(str3 == str4)
        printf("str3 and str4 are same.\n");
    else
        printf("str3 and str4 are not same.\n");
 
    return 0;
}
答案:输出两行。第一行是str1 and str2 are not same,第二行是str3 and str4 are same。


str1和str2是两个字符串数组。我们会为它们分配两个长度为12个字节的空间,并把"hello world"的内容分别拷贝到数组中去。这是两个初始地址不同的数组,因此比较str1和str2的值,会不相同。str3和str4是两个指针,我们无需为它们分配内存以存储字符串的内容,而只需要把它们指向"hello world“在内存中的地址就可以了。由于"hello world”是常量字符串,它在内存中只有一个拷贝,因此str3和str4指向的是同一个地址。因此比较str3和str4的值,会是相同的。

 

 

2、运行下图中的C++代码,打印出的结果是什么?


[cpp]
int Fun1(char* str) 

    printf("%s\n", str); 
    return 0; 

  
int Fun2(char* str) 

    printf("%s\n", str); 
    return 1; 

  
int main(int argc, char ** argv[]) 

    int res1, res2; 
    res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d")); 
    res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d")); 
  
    return res1 || res2; 

int Fun1(char* str)
{
    printf("%s\n", str);
    return 0;
}
 
int Fun2(char* str)
{
    printf("%s\n", str);
    return 1;
}
 
int main(int argc, char ** argv[])
{
    int res1, res2;
    res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d"));
    res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d"));
 
    return res1 || res2;
}
答案:打印出4行,分别是a、c、d、a。
在C/C++中,与、或运算是从左到右的顺序执行的。在计算rest1时,先计算Fun1(“a”) && Func2(“b”)。首先Func1(“a”)打印出内容为a的一行。由于Fun1(“a”)返回的是false, 无论Func2(“b”)的返回值是true还是false,Fun1(“a”) && Func2(“b”)的结果都是false。由于Func2(“b”)的结果无关重要,因此Func2(“b”)会略去而不做计算。接下来计算 Fun1(“c”) || Func2(“d”),分别打印出内容c和d的两行。

在计算rest2时,首先Func1(“a”)打印出内容为a的一行。由于Func1(“a”)返回false,和前面一样的道理,Func2(“b”)会略去不做计算。由于Fun1(“a”) && Func2(“b”)的.结果是false,不管Fun1(“c”) && Func2(“d”)的结果是什么,整个表达式得到的结果都是false,因此Fun1(“c”) && Func2(“d”)都将被忽略。

3、


[cpp]
int SizeOf(char pString[]) 

        return sizeof(pString); 

  
int main(int argc, char ** argv[]) 

        char* pString1 = "google"; 
        int size1 = sizeof(pString1); 
        int size2 = sizeof(*pString1); 
  
        char pString2[100] = "google"; 
        int size3 = sizeof(pString2); 
        int size4 = SizeOf(pString2); 
  
        printf("%d, %d, %d, %d", size1, size2, size3, size4); 
  
        return 0; 

int SizeOf(char pString[])
{
        return sizeof(pString);
}
 
int main(int argc, char ** argv[])
{
        char* pString1 = "google";
        int size1 = sizeof(pString1);
        int size2 = sizeof(*pString1);
 
        char pString2[100] = "google";
        int size3 = sizeof(pString2);
        int size4 = SizeOf(pString2);
 
        printf("%d, %d, %d, %d", size1, size2, size3, size4);
 
        return 0;
}
答案:4, 1, 100, 4。pString1是一个指针。在32位机器上,任意指针都占4个字节的空间。*pString1是字符串pString1的第一个字符。一个字符占一个字节。pString2是一个数组,sizeof(pString2)是求数组的大小。这个数组包含100个字符,因此大小是100个字节。而在函数 SizeOf中,虽然传入的参数是一个字符数组,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。

4.    引用与指针有什么区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
2) 不存在指向空值的引用,但是存在指向空值的指针。

5.    描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性
6.    全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量储存在静态数据库,局部变量在堆栈
7.   什么是平衡二叉树?
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1
8.   堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源
9.   什么函数不能声明为虚函数?
constructor
10.   冒泡排序算法的时间复杂度是什么?
O(n^2)
11.   写出float x 与“零值”比较的if语句。
if(x>0.000001&&x<-0.000001)
12.   Internet采用哪种网络协议?该协议的主要层次结构?
tcp/ip 应用层/传输层/网络层/数据链路层/物理层
13.   Internet物理地址和IP地址转换采用什么协议?
ARP (Address Resolution Protocol)(地址解析協議)
14. IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

【c 面试题】相关文章:

C/C++面试题目12-12

C,C++的几个面试题小集12-27

一个C/C++编程面试题12-20

嵌入式C/C++面试题201611-12

精选C++面试题及答案10-03

华为c语言笔试面试题题库11-09

嵌入式开发—C语言面试题08-17

2016年c++经典面试题及答案10-03

嵌入式C语言面试题(附答案)09-24

2016年嵌入式c语言面试题及答案09-12