c语言面试5(希诺麦田)

  1. 由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义
    A预处理 B编译 C链接 D执行

    答案: C。
    在链接阶段会检查所有符号的定义和引用是否匹配,当发现有被调用的函数未定义时就会报错。
    C语言文件的编译与执行的四个阶段并分别描述
    和volatile为什么要修饰中断里的变量

2.下面两个结构体

struct one{
double d;
char c;
int i;struct Two{
char c;
double d;
int i;
}

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是

A.16,24,16,24

B.16,20,16,20 ,

C.16,16,16,24

D.16,16,24,24

 答案:c

3.以下哪个选项一定可以将flag的第二个bit置0

A.flag&=-2
B.flag|=2
C.flag^=2
D.flag>>=2

答案:A.
2:0000 0010 第一个bit从右向左
-2 (按位取反):1111 1101
C 选项不确定会对第二位产生什么影响;^ 运算符表示按位异或操作。flag ^= 2 是一种简洁的赋值表达式,它将变量 flag 与值 2 进行按位异或操作,并将结果重新赋值给 flag。按位异或操作的规则是:对应位上的数字如果相同(都为 0 或都为 1),则结果为 0;如果不同(一个为 0,一个为 1),则结果为 1。
D 选项是移位操作,不会将特定位清零。
  1. 假定x=500,求下面函数的返回值
int fun(int x) 
{int countx 0;
while (x){countx++;x=X&(x-1);
}
return countx;}

A2 B3 C.5 D.6

答案:D
1 1111 0100 & 1 1111 0011
1 1111 0000& 1 1110 1111
1 1110 0000 & 1 1100 1111
1 1100 0000 & 1 1011 1111
1 1000 0000 & 1 0111 1111
1 0000 0000 & 0 1111 1111  结束;
  1. 在C语言中,以下代码执行之后。p的值为
void func(int *p)
{static int num =4;p = #(*p)--}int main(){int i=5;int *p = &i;func(p);printf("%d",*p);return 0;
}

A.3 B.4 c.5 D.6

答案:c
在 func 函数中,p 被修改为指向静态变量 num ,然后 num 的值减 1 变为 3,但是在 main 函数中打印的仍然是原来 i 的值 5,所以答案选 C。
  1. 定义int *swap()指的是 ()
    A一个返回整型值的函数swap()
    B.一个返回指向整型值指针的函数swap()
    C一个指向函数swap()的指针,函数返回一个整型值
    D.以上说法均错
    答案:B

  2. 嵌入式系统中经常要用到无限循环,怎么用C编写死循环

A.while(){}

B.while(1){}

C.for(){}

D.for(;;){}

B
bd都可以,但是嵌入式选择b;

  1. 如果有
#define AREA(a,b) a+b

则语句

int s=AREA(3,4)*AREA(3,4)执行后s的值是
A.24 B.49 C.144 D.19

答案:D
宏只有替换的功能; 3+4*3+4=19

  1. 下面运算结果分别为 _和 _
#include<stdio.h>int main(){char*array=:"\\0\0";printf("strlen数组名=%d\n'',strlen(array);
printf("sizeof数组名=%d\n,sizeof(array);
答案:strlen 数组名=2
sizeof 数组名=4 或 8(具体取决于系统架构)

在 C 语言中,当使用strlen函数计算字符串的长度时,它会返回字符串中字符的实际个数,不包括字符串结束符’\0’。而sizeof操作符返回的是变量或类型所占用的字节数。
在给定的代码中,array被初始化为"\0\0",其中包含两个转义字符’\0’。转义字符’\0’在 C 语言中表示字符串的结束符。
当使用strlen函数计算array的长度时,它会遇到第一个’\0’并停止计数,因此返回的长度为 2。
而sizeof(array)返回的是array指针所占用的字节数,通常在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节。

10写出下面的结果

unsigned char Foo(void){
unsigned int a 6;
signed int b = -20;
if (a > b) {return 1;}
else {return 0;}
}
答案:0
当进行无符号数和有符号数的比较时,有符号数会被转换为无符号数。
在这里,b(值为-20)转换为无符号数是一个很大的正数,显然大于a(值为 6)。所以a > b不成立,函数会返回 0。
  1. 下述代码的执行结果
#include <stdio.h>#include <stdlib.h>
#include <string.h> int main(){ 
int a[10]={0,1,2,3,4,5,6,7,8,9};
memcpy(a+3,a,5);for(int i=0;i<10;i++){printf("%d",a[i]);}return 0;
}
0120156789

因为memcpy的最后一个参数是需要拷贝的字节的数目!一个int类型占据4个字节!这样的话,本题5字节,实际上只能移动2个数字(往大的去)。

12.下面四个选项是四个整数在内存中的存储情况,其中数值最大的一个是
A Big-endian 低地址(12 34)高地址 ( 56 78)
B Big-endian 低地址(56 78 )高地址(1234)
C Little-endian 低地址(34 56 )高地址 (78 12)
D Little-endian低地址(78 12)高地址 (34 56 )

答案:B
其实上面说的是内存分布
实际上:
A. 12345678
B.56781234
C.1278 5634
D.56341278

大小端都得反一次;

在小端模式下,实际值0x12345678 在内存中的分布情况为(假设从地址 0x4000 开始存放):
地址 数据
0x4000 0x78
0x4001 0x56
0x4002 0x34
0x4003 0x12

在大端模式下,实际值:0x12345678 在内存中的分布情况为

0x4000 0x12
0x4001 0x34
0x4002 0x56
0x4003 0x78

  1. 按照需求,补充代码,保持如下函数接口定义:

a、 int malloc_array(int m,intn):二维数组空间分配,3行10列。
b、 void init_array(int
array,int m,int n):二维数组初始化赋值,其中第一行为等差数
列,第二行为等比数列,第三行为随机数()。
c. 二维数组的第三行的随机数使用冒泡法排序(void bubble_sort(int*array,int n)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int **malloc_array(int m, int n) {int **array = (int **)malloc(m * sizeof(int *));for (int i = 0; i < m; i++) {array[i] = (int *)malloc(n * sizeof(int));}return array;
}void init_array(int **array, int m, int n) {int i, j;// 第一行等差数列初始化for (j = 0; j < n; j++) {array[0][j] = j + 1;}// 第二行等比数列初始化array[1][0] = 1;for (j = 1; j < n; j++) {array[1][j] = array[1][j - 1] * 2;}// 第三行随机数初始化srand(time(NULL));for (i = 2; i < m; i++) {for (j = 0; j < n; j++) {array[i][j] = rand() % 100;}}
}void bubble_sort(int *array, int n) {int i, j, temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - i - 1; j++) {if (array[j] > array[j + 1]) {temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}
}int main(void)
{int m=3,n=10,i=0,j=0:int*array=NULL;//定义二维指针,最终使用它指向二维数组srand((unsigned)time(NULL));//为二维数组开辟空间
arr = malloc_array(m, n);//为二维数组赋值
init_array(arr,m,n);//使用冒泡排序完成二维数组第三行排序,由小到大
bubble_sort(arr[2], n);//二维数组输出到屏幕,按行输出
for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {printf("%d ", arr[i][j]);}printf("\n");}// 释放内存for (int i = 0; i < m; i++) {free(arr[i]);}free(arr);return 0;
}

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

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

相关文章

【SpringBoot + Vue 尚庭公寓实战】房间支付方式管理接口实现(三)

【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09;1、查询全部支付方式列表2、保存或更新支付方式3、根据ID删除支付方式 房间支付方式管理…

loading组件封装原理

以vue3为例,采用ts 的语言 首先可对所需数据定义在接口中 interface Prop{ //核心所需的就是 lading:boolean ,type: lading | skeleton} 进行调用 封装的话采用的是插槽 <div v-if="loading" ><slot name="template"><div v-if…

【机器学习】深度卷积生成对抗网络(DCGAN)用于图像生成

1. 引言 1.1 DGGAN是什么&#xff1f; DGGAN&#xff08;Directed Graph embedding framework based on Generative Adversarial Network&#xff09;是一种基于生成对抗网络&#xff08;GAN&#xff09;的有向图嵌入方法&#xff1a; 基本定义&#xff1a;DGGAN是一种结合了…

Java 的循环

Java 有三种循环&#xff1a;for&#xff0c;while&#xff0c;do while。 for 基本语法&#xff1a; for (循环变量初始化; 循环条件; 循环变量迭代){循环语句; }程序示例&#xff1a; public static void main(String[] args) {for (int i 0, j 0; i < 3; i, j--) {…

在虚拟机上搭建 Docker Kafka 宿主机器程序无法访问解决方法

1、问题描述 在虚拟机CentOS-7上搭建的Docker Kafka ,docker内部可以创建Topic、可以生产者数据、可以消费数据&#xff0c;而在宿主机开发程序无法消费Docker Kafka的数据。 1.1、运行情况 [dockerlocalhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND…

还不会线程池?JUC线程池源码级万字解析

线程池主要解决了两个问题&#xff1a; 第一个是当大量执行异步任务的时候提供较好的性能&#xff1b;在不使用线程池的时候&#xff0c;每次需要执行一个异步任务都需要新建一个 Thread 来进行&#xff0c;而线程的创建和销毁都是需要时间的&#xff0c;所以可以通过线程池来实…

AI论文速读 | 2024[ICML]FlashST:简单通用的流量预测提示微调框架

题目&#xff1a; FlashST: A Simple and Universal Prompt-Tuning Framework for Traffic Prediction 作者&#xff1a;Zhonghang Li, Lianghao Xia&#xff08;夏良昊&#xff09;, Yong Xu&#xff08;徐勇&#xff09;, Chao Huang 机构&#xff1a;华南理工大学&#xf…

【VVC】类和编码树了解

1. CodingStructure类 CodingStructure 类表示视频编码中的结构层次&#xff0c;用于存储编码单元&#xff08;CU&#xff09;、预测单元&#xff08;PU&#xff09;和变换单元&#xff08;TU&#xff09;等信息。 主要成员变量&#xff1a; area: 表示当前编码单元的区域。…

【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、&#x1f349;RabbitMQ相关的安装 三、&#x1f34e;SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…

在群晖上通过Docker部署DB-GPT

最近一直有网友在后台私信&#xff0c;发的内容高度统一&#xff0c;只有后面 8 位数字不一样&#xff0c;都是 &#xff03;22232 xxxxxxxx&#xff0c;有谁知道是什么意思吗&#xff1f;在我印象中&#xff0c;这是第二次这么大规模的发类似的字符串了 什么是 DB-GPT ? DB-G…

Linux lvm卷扩容之SSM

介绍 SSM&#xff08;System Storage Manager&#xff09;是系统存储管理器&#xff0c;它是一种统一的命令行界面&#xff0c;用于管理各种存储设备。通过SSM&#xff0c;用户可以方便地管理、配置和监控存储系统。检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、…

O2OA(翱途)开发应用平台(v9)开发实战(3)-如何做信息发布

内容管理就是用来发布信息的&#xff0c;比如说发布单位的内部信息&#xff1a;像公司新闻、通知公告、规章制度等等。 接下来我们来介绍一下如何创建&#xff0c;比如我要创建一个栏目&#xff0c;专门用来发布公司的规章制度 需求 规章制度 首先从菜单打开“内容管理设置…

平衡二叉树AVL

平衡二叉树是一种特殊的二叉查找树&#xff0c;其中每个节点的左右子树的高度差不超过1。这种树的平衡性质使其在多种操作下保持较高的效率。 平衡二叉树的定义与性质 严格定义&#xff1a;在平衡二叉树中&#xff0c;任一节点的两个子树的高度最大差别为一&#xff0c;这使得…

node学习之常用内置模块

这里只列举一些常用的&#xff0c;具体使用方法请查看官网 一、os模块 const os require("node:os"); // 获取计算机cup信息 // console.log(os.cpus());// 获取当前操作系统的换行符 // console.log(os.EOL);// 获取系统架构 // console.log(os.arch());// 以整数…

Linux卸载RocketMQ教程【带图文命令巨详细】

巨详细Linux卸载RocketMQ教程 #查询rocketmq进程 ps -ef | grep rocketmq #杀掉相关进程 kill -9 进程id #查找安装目录 find / -name runbroker.sh #删除rocketMQ目录 rm -rf 安装目录框起来的就是进程id&#xff0c;全部杀掉 这里就是我的安装目录&#xff0c;我的删除命令…

SwiftUI五视图动画和转场

代码下载 使用SwiftUI可以把视图状态的改变转成动画过程&#xff0c;SwiftUI会处理所有复杂的动画细节。在这篇中&#xff0c;会给跟踪用户徒步的图表视图添加动画&#xff0c;使用animation(_:)修改器给一个视图添加动画效果非常容易。 下载起步项目并跟着本篇教程一步步实践…

Linux下tcpwrappers防火墙介绍

tcpwrappers&#xff08;防火墙&#xff09; &#xff0d;&#xff0d;过滤TCP包头(/usr/sbin/tcpd) /etc/hosts.allow 允许 /etc/hosts.deny 拒绝 匹配顺序 tcp包头----<wrappers.so> ------- /etc/hosts.allow ------- /etc/hosts.deny 匹配规则< 规则马上写&…

AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到精准医疗诊断&#xff0c;AI技术正以其强大的计算能力和数…

算法之链表知识

一、链表的概念 链表是一种常见的数据结构&#xff0c;用于存储数据元素的集合。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。这种数据结构在动态内存分配中非常有用&#xff0c;因为它不需要连续的内存空间。 二、单向链表和双向链表 单向链表&a…

Rust基础学习-Rust宏

Rust中的宏是生成另一段代码的一段代码。可以根据输入生成代码&#xff0c;简化重复模式&#xff0c;使得代码更加简洁。比如我们一直在用的println!,vec!,panic!都是宏。 创建宏 可以使用macro_rules!创建一个宏&#xff1a; macro_rules! macro_name {(...) > {...} }这…