C/C++面试八股题(七)

更多专栏:

超详细的嵌入式面经专栏(适用于小白学习和大佬复习):https://www.nowcoder.com/creation/manager/columnDetail/mGYoDz

校招公司汇总专栏:https://www.nowcoder.com/creation/manager/columnDetail/0ybKdp

目录:

1.C 和 C++ 中常见的变量定义方式有哪些?

2.简单说明一下extern关键字,以及extern”C” 有什么作用?

3.请说明一下static关键字?

4.简单说说#include<> 和 #include""的区别是什么?

5.简单说说什么是原码、什么是反码、什么是补码?

6.请说说const关键字的用法?

内容:

1.C 和 C++ 中常见的变量定义方式有哪些?

基本类型

  • 这些是最常见的变量类型,包括整数、浮点数、字符等。
  • 例子:

    int x = 10;         // 定义一个整数变量 x,初始化为 10
    float y = 3.14f;    // 定义一个浮点数变量 y,初始化为 3.14
    double z = 3.14159; // 定义一个双精度浮点数变量 z,初始化为 3.14159
    char c = 'A';       // 定义一个字符变量 c,初始化为字符 'A'
    
    

    const 常量变量

  • 使用 const 定义常量,使得该变量值不可修改。
  • 例子:

    const int MAX = 100;    // 定义常量 MAX,值为 100,不可修改
    const float PI = 3.14f; // 定义常量 PI,值为 3.14
    
    

    volatile 变量

  • volatile 用来修饰变量,告诉编译器该变量的值可能随时变化(例如在中断或硬件寄存器中),因此每次访问时都必须从内存中读取,而不是从寄存器中缓存。
  • 指针变量

  • 指针是存储内存地址的变量。指针变量存储的是另一个变量的地址,而不是变量的值。
  • 例子:

    int a = 10;
    int *p = &a;  // 定义一个指针 p,指向变量 a 的地址
    
    

    常量指针与指针常量与常量指针常量(在专栏四也有讲过)

    常量指针

    • 常量指针概念:常量指针是一个指针,它指向的内容是常量。也就是说,通过这个指针不能修改它所指向的数据,但指针本身的值(即它指向的地址)可以改变。
    • 语法形式:const 数据类型* 指针变量名;
         int a = 10;
         int b = 20;
         const int* p = &a;
         // *p = 30; // 这是错误的,不能通过p修改它指向的值
         p = &b; // 这是正确的,p可以指向另一个变量
    
    
    • 解释:在这个例子中,p被定义为一个常量指针,指向a。我们不能通过p来修改a的值,因为p所指向的内容被视为常量。但是,p本身可以重新指向其他变量,比如让它指向b

    指针常量

    • 指针常量概念:指针常量是一个常量,它一旦被初始化指向一个地址后,就不能再指向其他地址,但可以通过这个指针修改它所指向的数据。
    • 语法形式:数据类型* const 指针变量名;
         int a = 10;
         int* const p = &a;
         *p = 20; // 这是正确的,可以通过p修改它指向的值
         // p = &b; // 这是错误的,p不能再指向其他地址
    
    
    • 解释:这里p是一个指针常量,它被初始化为指向a。之后就不能再让p指向其他变量了,但是可以通过p来修改a的值,如将a的值修改为20

    常量指针常量

  • 指针本身和指向的内容都不可修改。
  • const int * const p = &a;  // 定义一个常量指针常量 p,指向常量 a
    p = &b;  // 错误:p 是常量指针,不能修改指向的地址
    *p = 20;  // 错误:不能修改 *p 指向的内容
    
    

    6. 数组变量

  • 数组是具有相同类型元素的集合,数组元素的大小在定义时必须指定(或通过初始化时推导)。
  • 例子:

    int arr[5] = {1, 2, 3, 4, 5};  // 定义一个包含 5 个整数的数组 arr
    char str[] = "Hello";          // 定义一个字符串数组,大小由初始化推导
    
    

    结构体变量

  • 结构体是一种用户自定义的数据类型,可以组合不同类型的变量。
  • 例子:

    struct Point {
        int x;
        int y;
    };
    
    struct Point p1 = {10, 20};  // 定义一个结构体变量 p1,初始化为 (10, 20)
    
    

    枚举变量

  • 枚举是一种特殊的整型变量,用于表示一组常数值,通常用于增加代码的可读性。
  • 例子:

    enum Color { RED = 1, GREEN, BLUE }; // 定义一个枚举类型 Color,包含 RED、GREEN、BLUE
    enum Color color = RED;             // 定义一个枚举变量 color,值为 RED
    
    

    类型定义 (typedef)

  • typedef 用于为已有的数据类型定义新的别名,简化复杂类型的定义。
  • 例子:

    typedef unsigned int uint;  // 为 unsigned int 类型定义别名 uint
    uint a = 5;                  // 使用别名 uint 定义变量 a
    
    

    auto 关键字(C++11)(了解即可)

  • auto 关键字会根据初始化表达式推导出变量的类型,减少冗长的类型声明。
  • 例子:

    auto x = 5;    // auto 推导出 x 是 int 类型
    auto y = 3.14; // auto 推导出 y 是 double 类型
    
    

    register 关键字 (了解即可)

  • register 用于建议编译器将变量存储在寄存器中,以便更快的访问。现代编译器通常会忽略此修饰符,自动优化。
  • extern 关键字

  • extern 用于声明一个变量在其他文件中定义,使其可以在当前文件中访问。
  • inline 关键字(C++)(了解即可)

  • inline 关键字用于声明内联函数,它建议编译器将函数体直接插入调用点,减少函数调用的开销。
  • 例子:

    inline int add(int a, int b) {
        return a + b;
    }
    
    

    static 关键字

  • static 修饰变量时,表示该变量的生命周期延续至程序结束,并且仅在定义它的函数或文件内可见(局部静态变量或文件静态变量)。
  • 例子:

    • 局部静态变量
    void func() {
        static int count = 0;  // 局部静态变量,保留函数调用间的值
        count++;
        printf("%d\n", count);
    }
    
    

    thread_local 关键字(C++11)(了解即可)

  • thread_local 关键字用于定义线程局部变量,每个线程都有一个独立的副本。
  • mutable 关键字(C++)(了解即可)

  • mutable 允许修改 const 成员变量的值,通常用于类中标记那些即使在常量对象中也可以修改的成员变量。
  • 例子:

    class MyClass {
        mutable int count;
    public:
        MyClass() : count(0) {}
        void increment() const {
            count++;  // 即使在 const 成员函数中,也可以修改 count
        }
    };
    
    

    2.简单说明一下extern关键字,以及extern”C” 有什么作用?

    extern 用于变量声明

    extern 关键字常用于声明在其他文件中定义的全局变量。通过 extern,extern 可以声明一个变量,使得该变量是来自其他文件的变量在本文件可以被访问。

    例子:

    file1.c:

    #include <stdio.h>
    int globalVar = 100;  // 在 file1.c 中定义一个全局变量
    
    

    file2.c:

    #include <stdio.h>
    extern int globalVar;  // 声明在其他地方定义的全局变量
    void printGlobalVar() {
        printf("globalVar = %d\n", globalVar);  // 访问 file1.c 中的 globalVar
    }
    
    

    main.c:

    #include <stdio.h>
    extern vo

    剩余60%内容,订阅专栏后可继续查看/也可单篇购买

    嵌入式/C++八股 文章被收录于专栏

    本人双飞本,校招上岸广和通。此专栏覆盖嵌入式常见面试题,有C/C++相关的知识,数据结构和算法也有嵌入式相关的知识,如操作系统、网络协议、硬件知识。本人也是校招过来的,大家底子甚至项目,可能都不错,但是在面试准备中常见八股可能准备不全。此专栏很适合新手学习基础也适合大佬备战复习,比较全面。最终希望各位友友们早日拿到心仪offer。也希望大家点点赞,收藏,送送小花。这是对我的肯定和鼓励。 持续更新

    全部评论
    速更速更
    点赞 回复 分享
    发布于 01-20 14:09 陕西

    相关推荐

    1个小白:可以考虑投一下字节
    点赞 评论 收藏
    分享
    黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
    点赞 评论 收藏
    分享
    评论
    17
    25
    分享

    创作者周榜

    更多
    牛客网
    牛客企业服务