C语言笔试面试必刷题

news2024/11/17 9:45:18

🎊【面经】专题正在持续更新中,内含C语言,数据结构,Linux,网络编程等✨,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏

🪔本系列专栏 -  ​​​​​​面经

🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

📌个人主页 - 勾栏听曲_0的博客📝

🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

🎇须知少日拏云志,曾许人间第一流。

目录

关键字

数组与指针

各类定义

结构体、共用体、枚举

排序算法


关键字

        谈谈static的作用?

        在C语言中,static关键字有多种作用。首先,它可以用于隐藏全局变量或函数,这在同时编译多个文件时非常有用。其次,static还可以用于修饰局部变量和全局变量,这些变量在整个程序运行期间都存在,且只有一份拷贝,而且这些变量只在当前文件下可见,其他文件无法引用这些变量。static修饰的未初始化的全局或局部变量存储在.data,static修饰的已初始化的全局或局部变量存储在.bss段。

        谈谈const的作用?

        在C语言中,const关键字的主要作用是限定一个变量不允许被改变,产生静态作用。

        编译器一般不为const变量分配内存,而是将它保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作。

        谈谈volatile的作用?

        volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

        const和volatile是否可以同时修饰一个变量?有什么特殊含义?

        可以放一起修饰一个变量。

        同时修饰一个变量的含义表示一个变量在程序编译期不能被修改且不能被优化;在程序运行期,变量值可修改,但每次用到该变量的值都要从内存中读取,以防止意外错误。

        sizeof与strlen的区别?

        他们都是用于计算内存大小的。sizeof是C语言中的一个运算符,而strlen是一个函数;sizeof考研用于任意类型的数据,而strlen只能用于以空字符结尾的"/0"的字符串;sizeof计算的是类型或变量所占用的内存字节数('\0'计入),而strlen计算的是字符串中的字符个数(遇到'\0'截止,且'\0'不计入);sizeof在编译时就能确定结果,而strlen在运行时才能确定结果。

数组与指针

        数组与指针的区别 ?

        定义与初始化:数组是一种数据结构,用来存储多个相同类型的数据,他的大小在定义的时候就已经确定了,而且不能改变。指针是一种变量,存储的是一个地址,这个地址指向另一个变量或者内存空间,他的大小取决于相同的位数(32位系统位4字节,64位系统为8字节)。

        存储方式:数组一般存储在静态区或者栈上,他的地址是连续的,可以用下标访问;指针考研存储在任何地方,地址不连续,可以用解引用符*来访问。

        可变性:数组名是一个常量,指向数组的首地址,不能被赋值和修改;指针是一个变量,考研被赋值或修改,考研指向不同的地址空间。

        谈一谈数组指针与指针数组?

        数组指针和指针数组是两种不同的数据类型。数组指针本质是一个指针,它指向一个数组,也就是说它存储的是一个数组的地址。指针数组是一个数组,它的元素都是指针,也就是说它存储的是多个地址。

        数组指针的声明方式是类型 (*指针名) [长度]。指针数组的声明方式是类型 *数组名 [长度]。

        数组指针的大小取决于系统的位数,一般为4字节或8字节。指针数组的大小取决于数组的长度和元素类型,一般为长度乘以4字节或8字节。

       数组指针可以通过解引用符*来访问或修改它所指向的数组,例如(*p)[0] = 1表示将p所指向的数组的第一个元素赋值为1。指针数组可以通过下标来访问或修改它的元素,例如p[0] = &a表示将p的第一个元素赋值为变量a的地址。

        数组指针可以用于作为函数参数传递多维数组,例如void func(int (*p)[10])表示func函数接受一个包含10个int元素的一维数组或者一个包含10列的二维数组作为参数。指针数组可以用于存储不同长度或类型的数据,例如字符串或结构体等。

        一维数组与二维数组用指针怎么表示?

        如果有一个一维数组int a[5] = {1, 2, 3, 4, 5};,那么可以用一个指针int *p = a;来表示它。通过指针和下标可以访问或修改数组中的元素,例如p[0] = 10;表示将数组第一个元素赋值为10。

        如果有一个二维数组int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};,那么可以用一个指向数组的指针int (*p)[4] = a;来表示它。通过指针和下标可以访问或修改二维数组中的元素,例如p[0][0] = 10;表示将二维数组第一个一维数组的第一个元素赋值为10。

        指针占的字节数?

        指针是一种变量,它可以存储一个地址,指向另一个变量或内存空间。指针的大小取决于系统的位数和计算机的架构。

        在32位系统中,指针通常占用4个字节,因为内存地址可以用32位二进制数表示。

        在64位系统中,指针通常占用8个字节,因为内存地址可以用64位二进制数表示。

        谈一谈函数指针与指针函数?

        函数指针与指针函数是两种不同的数据类型。函数指针是一个指针,指向一个函数,他存储的是一个函数的地址;指针函数是一个函数,返回值是一个指针。

        函数指针的声明方式是类型说明符 (*函数名) (参数),例如int (*fun) (int x, int y)表示fun是一个指向有两个int类型参数和int类型返回值的函数的指针。指针函数的声明方式是类型 *函数名 (参数),例如int *fun (int x, int y)表示fun是一个有两个int类型参数和返回一个int类型指针的函数。

        函数指针的大小取决于系统的位数,一般为4字节或8字节。指针函数的大小取决于函数的定义,一般为函数体中语句所占用的字节数。

各类定义

定义一个整型数

int a;

定义一个指向整型数的指针

int *p;

定义一个指向指针的指针,他指向的指针指向一个整型数

int **p;

定义一个有10个整型数的数组

int arr[10];

定义一个有10个指针的数组,该指针指向一个整型数(指针数组)

int *arr[10];

定义一个指向有10个整型数数组的指针(数组指针)

int (*arr)[10];

定义一个指向函数的指针,该函数有一个整型数参数并返回以后整型数(函数指针)

int (*fun)(int );

定义一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(指针函数)

int (*fun[10])(int );

结构体、共用体、枚举

谈一谈你会结构体,共用体,枚举的看法?

        结构体是由多个不同类型的成员变量组成的数据类型,它可以用来表示具有多种属性的对象或记录。结构体的每个成员都占用独立的内存空间,结构体的总大小等于或大于各个成员的大小之和。结构体可以通过.运算符来访问或修改其成员变量的值。

        共用体是由多个不同类型的成员变量组成的数据类型,它可以用来表示多种可能性的数据。共用体的所有成员都共享同一块内存空间,共用体的总大小等于最大成员的大小。共用体只能存储其中一个成员变量的值,其他成员变量的值会被覆盖或无效。共用体也可以通过.运算符来访问或修改其成员变量的值。

        枚举是由一组有名字的整数常量组成的数据类型,它可以用来表示一些固定或有限的选项。枚举的每个常量都有一个默认或指定的整数值,枚举的总大小等于一个整数类型的大小。枚举可以通过其名字来访问或赋值其常量值,也可以通过强制类型转换来获取其整数值。

        在嵌入式系统开发中,枚举一般用于哪些地方?

        为固定的值命名,提高代码的可读性和可维护性。例如,为GPIO的输入输出模式、定时器的工作模式、串口的波特率等定义枚举值,使代码更加直观和清晰。

        作为数组访问的下标,方便管理数据。例如,为汽车故障诊断的PID参数、传感器的数据类型、协议的帧类型等定义枚举值,然后用枚举值作为数组的下标,可以快速地存取数据。

        作为函数参数或返回值,约束输入输出范围。例如,为中断处理函数、状态机函数、配置函数等定义枚举类型的参数或返回值,可以限制输入输出只能在枚举值的范围内,避免错误或异常。

        作为设置值或标志位,控制程序流程。例如,为系统的工作状态、错误类型、事件类型等定义枚举值,然后用枚举值作为设置值或标志位,可以控制程序的分支或循环。

        写一段代码片段本机器是大端还是小端? 

        我可以利用共用体(联合体)的特性来判断机器大小端,联合体中的不同成员共享同一块内存空间,因此可以通过访问不同类型的成员来判断字节的顺序。

#include <stdio.h>

// 定义一个联合体类型
union Test {
    int a; // 4字节
    char b; // 1字节
};

// 定义一个判断函数,返回1表示大端,返回0表示小端
int is_big_endian() {
    union Test t; // 创建一个联合体变量
    t.a = 0x01020304; // 给a赋值为16进制数
    if (t.b == 0x01) { // 如果b等于最高位字节
        return 1; // 表示大端
    } else { // 否则
        return 0; // 表示小端
    }
}

int main() {
    if (is_big_endian()) { // 调用判断函数
        printf("本机器是大端\n"); // 输出结果
    } else {
        printf("本机器是小端\n");
    }
    return 0;
}

排序算法

        各种排序算法的时间复杂度,最小与最大时间复杂度,空间复杂度,稳不稳定


        🍻各路大神,还有什么在笔试面试中遇到的问题欢迎补充说明,说不定下次文章更新中就有你提出的问题哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LSTM-Attention】基于长短期记忆网络融合注意力机制的多变量时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

URV5使用指南

1. 下载软件 搜索这个地址下载软件 https://github.com/Anjok07/ultimatevocalremovergui/releases/download/v5.6/UVR_v5.6.0_setup.exe 我现在使用的是目前的最新版本5.6.0&#xff0c;后面肯定会出新版&#xff0c;但是流程大致类似。 2.安装软件 基本一直点next就可以&a…

论坛议程|COSCon'23 区块链(B)

众多开源爱好者翘首期盼的开源盛会&#xff1a;第八届中国开源年会&#xff08;COSCon23&#xff09;将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01;各位新老朋友们&#xff0c;欢迎到成都&a…

【链表专题】

链表专题 移除链表元素设计链表反转链表 移除链表元素 移除链表元素&#xff08;Leetcode:203&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 /*** Definition for sing…

跟着Nature Communications学作图:R语言ggplot2散点组合误差线展示响应比(Response ratio)

论文 Meta-analysis of the impacts of global change factors on soil microbial diversity and functionality https://www.nature.com/articles/s41467-020-16881-7#Sec15 论文里提供了数据和代码&#xff0c;很好的学习素材 这篇论文是公众号的一位读者留言&#xff0c;…

某验四代滑块验证码逆向分析

逆向目标 目标&#xff1a;某验四代滑块验证码&#xff0c;w 参数逆向主页&#xff1a;aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v加密算法&#xff1a;RSA、AES 通讯流程 验证码流程分析 进入网页后&#xff0c;打开开发者人员工具进行抓包&#xff0c;点击滑动拼图验证&#xff0c…

最强英文开源模型LLaMA架构探秘,从原理到源码

导读&#xff1a; LLaMA 65B是由Meta AI&#xff08;原Facebook AI&#xff09;发布并宣布开源的真正意义上的千亿级别大语言模型&#xff0c;发布之初&#xff08;2023年2月24日&#xff09;曾引起不小的轰动。LLaMA的横空出世&#xff0c;更像是模型大战中一个搅局者。虽然它…

支付风控规则

支付宝使用基本风控规则 一、 6个规则 1、规则一&#xff1a;30分钟内&#xff0c;不要连续刷3笔&#xff08;包括失败交易&#xff09;&#xff0c;两笔交易时间间隔大于5分钟&#xff0c;交易金额不要一样&#xff0c;不要贴近限额&#xff1b; 2、规则二&#xff1a;非正…

Python数据结构(链表)

Python数据结构&#xff08;链表&#xff09; 单向链表 单向链表也叫单链表&#xff0c;是链表中最简单的一种形式&#xff0c;它的每个节点包含两个域&#xff0c;一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点&#xff0c;而最后一个节点的链接域则指向…

postgresql14-表的管理(四)

表table 创建表 CREATE TABLE table_name --表名 (column_name data_type column_constraint, --字段名、字段类型、约束字段&#xff08;可选&#xff09;column_name data_type, --表级别约束字段...,table_constraint );CREATE TABLE emp1 --创建表 AS SELECT * FROM empl…

『干货』WebStorm代码模板配置大全

『干货』WebStorm代码模板配置大全 文章目录 『干货』WebStorm代码模板配置大全一、代码模板二、前端 vue 框架2.1 选项式API2.2 组合式API2.3 组合式API TS 三、 前端 UniApp 框架3.1 选项式API3.2 组合式API3.3 组合式API TS 四、前端 React 框架4.1 类声明式4.2 函数声明式…

史上最全 2023全国大学生软件测试大赛——赛后有感

这个比赛什么成分我不好多说&#xff0c;首先说一下我的背景&#xff0c;我们学校是这个比赛的我们省赛的主办方&#xff0c;老师要求我们参加web应用测试和开发者测试&#xff0c;我都参加了&#xff0c;自认为还算是个学习成绩比较好的student&#xff0c;计算机专业前5%&…

【BP-Adaboost预测】基于BP神经网络的Adaboost的单维时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

详解 Diffusion (扩散) 模型

扩散模型是跨不同深度学习领域使用的生成模型。目前&#xff0c;它们主要用于图像和音频生成。最值得注意的是&#xff0c;这些模型是令人印象深刻的图像生成模型&#xff08;例如 Dalle2 和稳定扩散&#xff09;背后的驱动力。我相信您已经看过这些模型生成的闪烁图像。令人惊…

Java基础-IO流

目录 1 File 类的使用 1.1 File类的概念 1.2 构造方法 1.3 常用方法 1.4 课后练习 2 IO流原理及流的分类 2.1 IO原理 2.2 流的分类 2.3 IO流体系 2.4 接口方法 2.4.1 InputStream & Reader相同点 2.4.2 InputStream方法详解 2.4.3 Reader方法详解 2.4.4 Outp…

【数据结构】顺序表实现通讯录

前言 在上一节中我们实现了顺序表&#xff0c;现在我们将使用顺序表完成通讯录的实现。&#xff08;注&#xff1a;本人水平有限&#xff0c;“小屎山”有些许bug&#xff0c;代码冗余且语无伦次&#xff0c;望谅解&#xff01;&#x1f605;&#xff09; 文章目录 一、数据结构…

postgresql14-安装(一)

安装 以管理员权限运行windows版安装包&#xff0c;否则会导致安装不全。过程中记录密码。 在服务管理&#xff0c;启动postgresql服务。 管理工具pgadmin

使用Dockerfile生成docker镜像和容器的方法记录

一、相关介绍 Docker 是一个开源的容器化平台&#xff0c;其中的主要概念是容器和镜像。 容器是 Docker 的运行实例。 它是一个独立并可执行的软件包&#xff0c;包含了应用程序及其依赖的所有组件&#xff08;如代码、运行时环境、系统工具、库文件等&#xff09;。容器可以在…

用户及授权设置API

用户及授权设置API 一、登录API——wx.login(object)二、用户信息API——wx.getUserInfor(object)三、授权API——wx.authorize(object object)四、设置API——wx.openSetting(object object)&wx.getSetting(object object)1、wx.openSetting(object object)2、wx.getSetti…

汽车屏类产品(五):中控IVI车载信息娱乐系统

前言: 车载信息娱乐系统(IVI)的起源可以追溯到20世纪,按钮调幅收音机被认为是第一个功能。从那以后,IVI系统在创造壮观的车内体验方面变得不可或缺,以至于汽车被称为“车轮上的智能手机”。但随着包括自动驾驶汽车在内的汽车技术的进步,以及对个性化体验的需求不断增长…