六方云笔试总结

news2024/9/23 17:18:58

1. 

(1)题目

        外部变量,指的是处于函数外部的全局静态变量,所以选c

(2)知识点

        1. static

        (1)函数外部的全局变量

                当一个变量在函数外部定义并使用static关键字修饰时,这个变量的作用域被限制在定义它的源文件内部。其他源文件无法直接访问该变量

        (2)函数内部的局部范围

                当static关键字用于函数内部的局部变量时,该变量的生命周期将扩展到整个程序的运行周期,而非一般的函数调用周期,这个变量在第一次进入进入声明它的函数时给它分配内存并初始化,切在后续调用该函数时,变量保留其值,不再重新分配内存并初始化

2. 

        本题,a 0-7   b 8-15   c 16-23  答案为c,三个字节

(1)位域

        位域通过在结构体中定义具有指定宽度(以位为单位)的成员来实现

        在 C 语言中,位域(Bit Fields)是一种特殊的结构体成员,允许用户定义和操作位级别的数据。位域主要用于内存紧凑型数据存储和对硬件寄存器的直接操作。每个位域成员可以占用结构体中一个或多个比特位,而不是通常的字节单位

#include <stdio.h>

struct BitField {
    unsigned int a : 3; // 占用3个比特位
    unsigned int b : 5; // 占用5个比特位
    unsigned int c : 2; // 占用2个比特位
};

int main() {
    struct BitField bf;

    bf.a = 5; // 5的二进制是101,占3位
    bf.b = 17; // 17的二进制是10001,占5位
    bf.c = 2; // 2的二进制是10,占2位

    printf("a: %u, b: %u, c: %u\n", bf.a, bf.b, bf.c);

    return 0;
}

(2)结构体存储(内存对齐原则)

        1. 结构体成员变量只能存放在内存地址为自身基本类型长度整数倍的内存单元中

        2. 结构体大小必须为最大成员变量类型整数倍的大小

3. 程序入栈出栈遵循先入后出

4. c语言运算符优先级和结合性

(1)优先级

()[] -> .    >    单目      >    双目   >   三目    >   逗号运算符

                特例:   ||(逻辑或三目)  >  赋值运算符(双目) >  逗号运算符

(2)结合性

        大部分自左至右

        单目运算符、三目运算符(? ;)、赋值运算符   自右向左

5. 大小端字节序

(1)小端存储:低地址存放低数据位、高地址存放高数据位

(2)大端存储:低地址存放高数据位、高地址存放低数据位

共用体

int x      地址          char y

44         0x2000       0

 33        0x2001       1

22         0x2002        2

11         0x2003        3

6. 函数指针

(1)定义

        指向函数的指针

(2)定义函数指针

        例如需要定义一个返回值为整数,并接收两个整数参数的函数

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

            

7. 已知一个数组table,用一个宏定义,并求出数据的元素个数

#include <stdio.h>

#define TABLE {1, 2, 3, 4, 5}
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))

int main(void)
{
    int table[] = TABLE;
    int size = ARRAY_SIZE(table);

    return 0;
}

8. static的用途

(1)静态全局变量:限制全局变量的作用域,使其只在声明它的文件内可见

(2)静态局部变量:延长局部变量的生命周期,使其在函数多次调用间保持其值

(3)静态函数:限制函数的作用域,使其只在声明它的文件内可见

9. 数组和链表的区别

(1)内存分配和空间访问

        1. 数组

        数组在内存空间分配时是连续的,访问元素只需要通过数组下标访问即可

        2. 链表

        链表的内存空间分配是动态变化的,不连续,访问元素要通过指针遍历链表

(2)插入和删除数据

        1. 数组

        数组在删除和插入数据时,需要移动其他元素来保持数组的连续性,比较繁琐

        2. 链表

        链表的插入和删除元素不需要移动其他元素,只需要通过指针来操作链表节点即可

(3)适用场景

        1. 数组

        数组适用于频繁访问元素的场景

        2. 链表

        适用于频繁插入和删除的场景

(4)实现复杂度

        1. 数组

        只需要简单创建即可

        2. 链表

        需要创建链表标签、各节点结构体和指针操作

10. 

        第三句代码解析:ptr++ 后置++,先用后加

        *(ptr++) += 100;

        *ptr = *ptr + 100;

        ptr++; 

11. 

        对传入的指针str要进行操作来改变指向,需要传二级指针

void GetMemory(char **p)
{    
    *p = (char *)malloc(100);
}

void Test(void)
{
    char *str = NULL;
    GetMemory(&str);
}

12. 

        主函数中a只是一个char型字符变量,不能进行长字符串的拷贝

#include <stdio.h>
#include <string.h>

int main(void)
{
    char a[32] = {0};
    char *str = a;

    strcpy(str, "hello");

    printf("%s\n", str);
}

13. 

        unsigned char ucCmdNum; 中ucCmdNum取值范围是0~255

        此题中超出作用范围,会陷入死循环

14. 

        本题中,考察对memcpy源代码的理解,函数形参和返回值均为void

void *memcpy(void *dest, const void *src, size_t n)
{
    unsigend char *d = (unsigend char *)dest;
    const unsigend char *s = (const unsigend char *)src;
    size_t i = 0;

    for (i = 0; i < n; i++)
    {
        d[i] = s[i];
    }

    return dest;
}

        

15. 

int strcmp(char *source, char *dest)
{
    while (*source == *dest && *source != '\0')
    {
        source++;
        dest++;
    }

    return *source - *dest;
}

16. 实现单向链表的冒泡排序(以无头链表为例子)

int LinklistBubbleSort(Linklist *plist)
{
    Linknode *ptmpnode1 = NULL;
    Linknode *ptmpnode2 = NULL;
    Linknode *pendnode = NULL;
    Datatype tmpdata = 0;
    
    ptmpnode1 = plist->phead;
    if (NULL == ptmpnode1 || NULL == ptmpnode1->pnext)//判断链表是否为控链表或只有一个元素
	{
		return -1;
	}

	while (1)
	{
		ptmpnode1 = plist->phead;
		ptmpnode2 = ptmpnode1->pnext;
		if (pendnode == ptmpnode2)//排序结束的标志
		{
			break;
		}

		while (ptmpnode2 != pendnode)
		{
			if (ptmpnode1->data > ptmpnode2->data)
			{
				tmpdata = ptmpnode1->data;
				ptmpnode1->data = ptmpnode2->data;
				ptmpnode2->data = tmpdata;
			}
			ptmpnode1 = ptmpnode1->data;
			ptmpnode2 = ptmpnode2->data;
		}
		pendnode = ptmpnode2;
	}

    return 0;
}

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

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

相关文章

函数的学习(二)

1.函数嵌套 在C语言中&#xff0c;函数的嵌套是指在一个函数内部调用另一个函数。通过函数的嵌套&#xff0c;可以将程序的功能细化&#xff0c;提高代码的可读性和可维护性。函数的嵌套可以是直接嵌套&#xff0c;也可以是间接嵌套。 直接嵌套是指一个函数直接在另一个函数内…

华彩38载 同心筑未来—中华财险客户节盛大启幕!

活动主题&#xff1a;华彩38载 同心筑未来—中华财险客户节金融知识有奖问答 活动时间&#xff1a;2024年7月26日至9月15日 参与方式&#xff1a;① 微信搜索并关注公众号“中华财险宁波分公司”进入答题活动页面&#xff0c;点击“开始答题”即可开始答题&#xff1b;②规定…

ComfyUI-MuseTalk部署依赖mmcv

ComfyUI-MuseTalk部署依赖mmcv ComfyUI-MuseTalk是MuseTalk基于ComfyUI的自定义节点插件。MMPose 是一款基于 PyTorch 的“人体姿态”分析的开源工具箱&#xff0c;是 OpenMMLab 项目的成员之一。OpenMMLab 团队致力于构建了深度学习时代最具影响力的开源计算机视觉算法系统&am…

【C++标准库】介绍及使用string类

string 一.string类介绍二.string类的静态成员变量三.string类的常用接口1.构造函数&#xff08;constructor&#xff09;2.析构函数&#xff08;destructor&#xff09;3.运算符重载&#xff08;operator&#xff09;1.operator2.operator[]3.operator4.operator 4.string的四…

SecureCrt设置豆沙绿

绿豆沙色能有效的减轻长时间用电脑的用眼疲劳&#xff01; 色调&#xff1a;85&#xff0c;饱和度&#xff1a;123&#xff0c;亮度&#xff1a;205&#xff1b;RGB颜色红&#xff1a;199&#xff0c;绿&#xff1a;237&#xff0c;蓝&#xff1a;204&#xff1b; 十六进制颜色…

3步阐述搜索框做了什么事情

搜索功能是几乎每个产品的通用标配功能&#xff0c;一个看似简单的搜索框背后&#xff0c;其实隐含了大量的设计思考和技术壁垒。本文将从三个部分阐述&#xff0c;为何搜索框并不简单。 本文将从搜索场景的思考、基于步骤的搜索设计以及搜索数据的追踪3个部分&#xff0c;对产…

今日arXiv最热大模型论文:北京大学最新综述:视觉大模型中的漏洞与攻防对抗

近年来&#xff0c;视觉语言大模型&#xff08;LVLM&#xff09;在文本转图像、视觉问答等任务中大放异彩&#xff0c;背后离不开海量数据、强大算力和复杂参数的支撑。 但是&#xff01;大模型看似庞大的身躯背后却有一颗脆弱的“心脏”&#xff0c;极易受到攻击。攻击者可以…

史上最全,网工必考证书大盘点,竟然有20多个?

最近很多朋友来咨询&#xff0c;作为网工能考什么证书&#xff1f;证书那么多要怎么选择&#xff1f;哪个性价比高、哪个回报大等等等等的问题。 不难看出&#xff0c;大家最近这个想要学习和提升的势头很猛&#xff0c;毕竟现在这个环境下&#xff0c;属实是不好过了&#xff…

FPGA开发——数码管的使用(二)

一、概述 在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现&#xff0c;这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变&#xff0c;原来是单个数码管的显示&#xff0c;所以位选就直…

Android Studio运行报错:module java.base dose not “opens java.io“ to unnamed module

今天第一次使用Android Studio运行一个安卓工程&#xff0c;报如图错误,应该是环境问题。 解决&#xff1a; 右上角的设置图标->settings->Buid,Execution,Deployment->Build Tools->Gradle->Gradle JDK->选择本地环境的java_home jdk&#xff08;怎么安装…

docker镜像不可用

现在阿里、163等docker镜像基本不能使用&#xff0c;不能pull镜像了。 1.腾讯云内部 腾讯云服务器内部可用镜像&#xff08;当然&#xff0c;需要先有一个腾讯云服务器&#xff09;&#xff1a;https://mirror.ccs.tencentyun.com 配置方法&#xff0c;vi /etc/docker/daemon…

C++—— IO流

一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf()和printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;中读取数据&#xff0c;并将值存放在变量中。 printf()&#xff1a;将指定的文字/字符串输出到标准输出设备&#xff08;…

Python 聊天机器人项目-8-学习使用 NLTK 和 Keras 构建您的第一个聊天机器人

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;Python 聊天机器人项目 - 学习使用 NLTK 和 Keras 构建您的第一个聊天机器人 - DataFlair (data-flair.training) 数据集&#xff1a;https://data-flair.training/blogs/download-python-chatbot-data-…

Web3时代:科技与物联网的完美结合

随着信息技术的不断进步和物联网应用的普及&#xff0c;Web3技术作为下一代互联网的重要组成部分&#xff0c;正逐渐与物联网技术深度融合&#xff0c;共同开创了新的科技时代。本文将深入探讨Web3技术与物联网的结合&#xff0c;探索它们如何共同推动未来科技发展的新趋势和应…

【32单片机篇】项目:智能排队控制系统

一、项目需求 1. 红外传感器检测有人通过并计数&#xff1b; 2. 计数值显示在LCD1602&#xff1b; 3. 允许通过时&#xff0c;LED1闪烁&#xff0c;蜂鸣器不响&#xff0c;继电器不闭合&#xff1b; 4. 不允许通过时&#xff0c;LED2闪烁&#xff0c;蜂鸣器响&#xff0c;继电…

工信部:2024上半年我国信息安全领域收入909亿元

2024年上半年软件业经济运行情况 上半年&#xff0c;我国软件和信息技术服务业&#xff08;以下简称“软件业”&#xff09;运行态势良好&#xff0c;软件业务收入和利润均保持两位数增长&#xff0c;软件业务出口收入增速由负转正&#xff0c;主要大省持续向好发展。 一、总…

光纤基础科普

这部分主要介绍光纤的常见接口&#xff08;四种&#xff09;、光纤传输的种类、光模块的封装类型。 文章目录 一、光纤的常见接口二、光模块封装三、光纤传输种类 一、光纤的常见接口 光纤接口种类繁多&#xff0c;这里给出常用的四种 &#xff08;1&#xff09;SC 型光纤接…

C++静态成员变量和静态成员函数

演示代码如下&#xff1a; #include<iostream> using namespace std;class Person { public://静态成员函数 所有对象共享一个函数&#xff0c;且只能调用静态成员变量 ******static void func(){m_A 300;cout << "静态成员函数调用" << endl;}/…

Charles抓包工具系列文章(七)-- Rewrite工具的应用示例

一、背景 客户端通过域名访问后端服务,在api网关层,会判断path的前缀,默认/api开头的请求都转发至后端服务A。 当前缀是/assist/api开头,请求将转发至后端服务B(部署在192.168.80.226,便于测试对比) 在不改动kong网关配置的情况下,现需要把后者的请求转发至192.168.…

RxJava基础使用

Rx思想 事件从起点流向终点。 过程中可以对事件进行拦截&#xff0c;拦截时可以对事件进行处理&#xff0c;处理后将处理后的事件继续流向终点。 终点接收上一次处理后的事件。 获取网络图片并显示 基础实现 使用Observable.just(path) 创建图片路径的Observable。 使用m…