• C语言面试题(一)


    1、以下为Linux下的32 位C 程序,请计算sizeof 的值。
    char str[] = “Hello” ;
    char *p = str ;
    int n = 10;
    int a2[3];
    请计算
    (1)sizeof (str) =
    (2)sizeof (p) =
    (3)sizeof (n) =
    (4)sizeof (a2) =
    【答案】

    (1)6、(2)4 、(3 )4 (4) 12

    64位系统上答案:6/8/4/12。

    1. sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
    2. sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小。
      3)数组的sizeof值等于数组所占用的内存字节数。
      4)在32位计算机中,一个指针变量的返回值通常是4(注意结果是以字节为单位),在64位系统中指针变量的sizeof通常为8。

    参考 C程序设计语言(第2版·C语言之父着)

    2、void Func ( char str[100])
    {
    …… ;
    }
    请计算sizeof( str ) =
    【答案】4
    这里str是指针。

    3、void * p = malloc(100);
    请计算sizeof (p) =
    【答案】4

    4、请问以下代码有什么问题:
    int main()
    {
    char a;
    char *str=&a;
    strcpy(str,"hello");
    printf(str);
    return 0;
    }
    【答案】
    没有为str分配内存空间,将会发生异常。
    问题出在将一个字符串复制进一个字符变量指针所指
    地址。虽然可以正确输出结果,但因为越界进行内在
    读写而导致程序崩溃。

    5、struct name1{
    char str;
    short x;
    int num;
    } ;
    求sizeof(name1)?
    【答案】8

    6、struct name2{
    char str;
    int num;
    short x;
    };
    求sizeof(name2)?
    【答案】12

    7、关键字volatile有什么含意? 并给出三个不同的例
    子。
    【参考答案】一个定义为volatile的变量是说这变量可
    能会被意想不到地改变,这样,编译器就不会去假设
    这个变量的值了。精确地说就是,优化器在用到这个
    变量时必须每次都小心地重新读取这个变量的值,而
    不是使用保存在寄存器里的备份。下面是volatile变量
    的几个例子:
    1). 并行设备的硬件寄存器(如:状态寄存器)
    2). 一个中断服务子程序中会访问到的非自动变量
    (Non-automatic variables)
    3). 多线程应用中被几个任务共享的变量

    8、Heap与stack的差别。
    【标准答案】Heap是堆,stack是栈。
    Stack的空间由操作系统自动分配/释放,Heap上的空
    间手动分配/释放。
    Stack空间有限,Heap是很大的自由存储区
    C 中的malloc 函数分配的内存空间即在堆上,C++中对
    应的是new 操作符。
    程序在编译期对变量和函数分配内存都在栈上进行,且
    程序运行过程中函数调用时参数的传递也在栈上进行。

    9、程序的局部变量存在于___ 中,全局变量存在于
    _中,动态申请数据存在于 中。
    【标准答案】程序的局部变量存在于栈(stack) 中,全局
    变量存在于静态数据区中,动态申请数据存在于堆(
    heap)中。

    10、嵌入式系统总是要用户对变量或寄存器进行位操作。
    给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。
    在以上两个操作中,要保持其它位不变。

    define BIT3 (0x1<<3)

    static int a;

    void set_bit3(void)
    {
    a |= BIT3;
    }

    void clear_bit3(void)
    {
    a &= ~BIT3;
    }

    11、 进程间通信的方式有?
    进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享内存), SOCKET 等

    12、48. 编写strcat函数,已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
    其中strDest 是目的字符串,strSrc 是源字符串。
    (1)不调用C++/C 的字符串库函数,请编写函数 strcat
    (2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

    答(1):
    char * strcat (char * dst, const char * src)
    {
    if(dst == NULL) {
    return NULL;
    }
    Char *cp =dst;
    while( cp )
    cp++; /
    find end of dst */ “hello”
    while( *cp++ = src++ ) ; / Copy src to end of dst /
    return( dst ); /
    return dst */
    }

    答(2):方便赋值给其他变量

    养生码农
  • 相关阅读:
    用迁移学习创造的通用语言模型ULMFiT,达到了文本分类的最佳水平
    论文分享|《Universal Language Model Fine-tuning for Text Classificatio》
    tesnorflow实现N个epoch训练数据读取的办法
    理解TensorFlow的Queue
    tensorflow基本操作介绍
    前端框架 Vue 初探
    LeetCode 292 Nim Game(Nim游戏)
    设计模式有感
    说说翻转的数据结构课
    java 中xml转换为json对象
  • 原文地址:https://www.cnblogs.com/seamoon23/p/12102753.html
Copyright © 2020-2023  润新知