C语言经典面试题目(二十)

1、什么是动态内存分配?如何在C语言中进行动态内存分配?

动态内存分配是指在程序运行时根据需要动态地分配内存空间。这种分配方式允许程序在运行时根据需要申请内存空间,并在不再需要时释放该内存空间,从而更灵活地管理内存资源。

在C语言中,可以使用标准库函数malloc()calloc()realloc()来进行动态内存分配:

  • malloc()函数用于分配指定大小的内存空间,返回指向分配内存的指针。
  • calloc()函数用于分配指定数量和大小的内存空间,并将其初始化为0,返回指向分配内存的指针。
  • realloc()函数用于调整已分配内存的大小,可以增加或减少内存空间,返回指向重新分配内存的指针。

动态分配的内存空间需要在不再需要时手动释放,可以使用free()函数来释放动态分配的内存。

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)malloc(5 * sizeof(int)); // 分配大小为5个整数的内存空间

    if (ptr == NULL) {
        printf("内存分配失败\n");
        exit(1);
    }

    // 使用分配的内存空间
    for (int i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }

    // 释放动态分配的内存空间
    free(ptr);

    return 0;
}

2、什么是结构体?如何定义和使用结构体?

结构体是C语言中一种用户自定义的数据类型,用于封装多个不同类型的变量。结构体可以包含不同类型的成员变量,这些变量称为结构体的成员。通过结构体,可以将多个相关的数据组织在一起,便于管理和操作。

结构体的定义方式为:

c 复制代码
struct 结构体名 {
    数据类型 成员1;
    数据类型 成员2;
    // 更多成员...
};

结构体的使用方式为:

c 复制代码
// 定义结构体类型
struct Person {
    char name[20];
    int age;
};

// 使用结构体
struct Person p1;
strcpy(p1.name, "John");
p1.age = 30;

3、什么是联合体?它与结构体有什么区别?

联合体(Union)是一种特殊的数据类型,它允许在同一内存空间存储不同类型的数据。与结构体不同的是,联合体的所有成员共享同一块内存空间,且只能同时存储其中一个成员的值。

c 复制代码
union MyUnion {
    int num;
    float fnum;
    char ch;
};

4、什么是枚举?如何定义和使用枚举类型?

枚举(Enumeration)是一种用户自定义的数据类型,用于定义具有离散值的常量集合。枚举常用于定义一组相关的常量,提高代码的可读性和可维护性。

枚举的定义方式为:

c 复制代码
enum 枚举名 {
    标识符1 = 值1,
    标识符2 = 值2,
    // 更多标识符...
};
c 复制代码
// 定义枚举类型
enum Weekday {
    Monday = 1,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

// 使用枚举
enum Weekday today = Tuesday;
printf("今天是星期%d\n", today);

5、什么是函数?如何定义和调用函数?

函数是一段封装了特定功能的代码块,可以重复调用。C语言中的函数由函数名、参数列表和函数体组成。函数的定义包括函数的返回类型、函数名、参数列表和函数体,而函数的调用则通过函数名和参数列表实现。

函数的定义方式为:

c 复制代码
返回类型 函数名(参数列表) {
    函数体
}
c 复制代码
// 定义函数
int add(int a, int b) {
    return a + b;
}

// 调用函数
int result = add(3, 5);

在C语言中,函数可以有返回值也可以没有返回值(void类型函数)。函数可以被多次调用,实现代码的模块化和复用。

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
搬砖的小码农_Sky6 小时前
C语言:数组
c语言·数据结构
宅小海6 小时前
scala String
大数据·开发语言·scala