【绝密】大厂笔试题

news2024/10/6 14:34:30

👦个人主页:@Weraphael

✍🏻作者简介:目前是C语言学习者

✈️专栏:C语言刷题
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬  点赞👍🏻 收藏 📂 加关注😍


前言

  • 对指针或者数组的某个知识点不了解,请参考以下链接

数组篇:深入学习数组

指针篇:初阶指针 + 指针进阶

  • 重要的知识点

①sizeof(数组名),sizeof内部单独放一个数组名,计算的是整个数组的大小,单位:字节

②&数组名,取出的是整个数组的地址

③除此之外所有的数组名都表示首元素地址

④指针的大小为4/8个字节(取决于环境)

目录

 一、数组笔试题

1、一维数组

2、字符数组 

        (1)sizeof

        (2)strlen

3、 字符串

        (1)sizeof

        (2)strlen

4、字符指针

        (1)sizeof

        (2)strlen

5、二维数组

二、指针笔试题


一、数组笔试题

1、一维数组

#include <stdio.h>
int main()
{
    int a[] = { 1,2,3,4 };
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(a + 0));
    printf("%d\n",sizeof(*a));
    printf("%d\n",sizeof(a + 1));
    printf("%d\n",sizeof(a[1]));
    printf("%d\n",sizeof(&a));
    printf("%d\n",sizeof(*&a));
    printf("%d\n",sizeof(&a + 1));
    printf("%d\n",sizeof(&a[0]));
    printf("%d\n",sizeof(&a[0] + 1));
    
    return 0;
}

【答案解析】

 【程序结果】

x86环境下

 2、字符数组 

(1)sizeof

#include <stdio.h>
int main()
{
    char arr[]  = { 'a','b','c','d','e','f' };
    printf("%d\n",sizeof(arr));
    printf("%d\n",sizeof(arr + 0));
    printf("%d\n",sizeof(*arr));
    printf("%d\n",sizeof(arr[1]));
    printf("%d\n",sizeof(&arr));
    printf("%d\n",sizeof(&arr + 1));
    printf("%d\n",sizeof(&arr[0] + 1));
    return 0;
}

【答案解析】

 【程序结果】

x86环境

 (2)strlen

strlen只求字符串长度,统计的是'\0'之前出现的字符个数(不包括\0),找到'\0'才算结束。

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

int main()
{
    char arr[]  = { 'a','b','c','d','e','f' };
    
    printf("%d\n",strlen(arr));
    printf("%d\n",strlen(arr + 0));
    printf("%d\n",strlen(*arr));
    printf("%d\n",strlne(arr[1]));
    printf("%d\n",strlen(&arr));
    printf("%d\n",strlen(&arr + 1));
    printf("%d\n",strlen(&arr[0] + 1));
    
    return 0;
}

【答案解析】

 【非法访问】

3、 字符串

(1)sizeof

#include <stdio.h>

int main()
{
    char arr[]  = "abcdef";
    printf("%d\n",sizeof(arr));
    printf("%d\n",sizeof(arr + 0));
    printf("%d\n",sizeof(*arr));
    printf("%d\n",sizeof(arr[1]));
    printf("%d\n",sizeof(&arr));
    printf("%d\n",sizeof(&arr + 1));
    printf("%d\n",sizeof(&arr[0] + 1));
    return 0;
}

【答案解析】

 (2)strlen

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

int main()
{
    char arr[]  = "abcdef";
    printf("%d\n",strlen(arr));
    printf("%d\n",strlen(arr + 0));
    printf("%d\n",strlen(*arr));
    printf("%d\n",strlen((arr[1]));
    printf("%d\n",strlen((&arr));
    printf("%d\n",strlen((&arr + 1));
    printf("%d\n",strlen((&arr[0] + 1));
    return 0;
}

【答案解析】

 4、字符指针

(1)sizeof

#include <stdio.h>
int main()
{
    char* p = "abcdef";
    printf("%d\n",sizeof(p));
    printf("%d\n",sizeof(p + 1));
    printf("%d\n",sizeof(*p));
    printf("%d\n",sizeof(p[0]));
    printf("%d\n",sizeof(&p));
    printf("%d\n",sizeof(&p + 1));
    printf("%d\n",sizeof(&p[0] + 1));
    
    return 0;
}

 【答案解析】

(2)strlen

#include <stdio.h>
#include <string.h>
int main()
{
    char* p = "abcdef";
    printf("%d\n",strlen(p));
    printf("%d\n",strlen(p + 1));
    printf("%d\n",strlen(*p));
    printf("%d\n",strlen(p[0]));
    printf("%d\n",strlen(&p));
    printf("%d\n",strlen(&p + 1));
    printf("%d\n",strlen(&p[0] + 1));
    
    return 0;
}

【答案解析】

5、二维数组

#include <stdio.h>
int main()
{
    int arr[3][4] = {0};
    printf("%d\n",sizeof(arr));
    printf("%d\n",sizeof(arr[0][0]));
    printf("%d\n",sizeof(arr[0]));
    printf("%d\n",sizeof(arr[0] + 1));
    printf("%d\n",sizeof(*(arr[0] + 1));
    printf("%d\n",sizeof(arr + 1);
    printf("%d\n",sizeof(*(arr + 1));
    printf("%d\n",sizeof(&arr[0] + 1));
    printf("%d\n",sizeof(*(&arr[0] + 1));
    printf("%d\n",sizeof(*arr));
    printf("%d\n",sizeof(arr[3]));
}

 【答案解析】

上半部分

 下半部分

二、指针笔试题

第一题

#include <stdio.h>
int main()
{
    int a[5] = {1,2,3,4,5};
    
    int *p = (int*)(&a + 1);
    
    printf("%d,%d\n",*(a + 1),*(p - 1));
    
    return 0;
}

 【答案解析】

第二题

#include <stdio.h>

//已知结构体的大小为20个字节
//p的值为0x100000

struct Test
{
    int num;
    char* name;
    short xhz;
    char cha[2];
    short cxk[4];
}*p;

int main()
{
    printf("%p\n",p + 0x1);
    printf("%p\n",(unsigned long)p + 0x1);
    printf("%p\n",(unsigned int*)p + 0x1);
    return 0
}

【答案解析】

【程序运行结果】 

第三题

#include <stdio.h>
int main()
{
    int arr[4] = {1,2,3,4};
    int *p = (int*)(&arr + 1);
    int *ptr = (int *)((int)arr + 1);
    printf("%x,%x",p[-1],*ptr);
    return 0;
}

 【答案解析】

第四题

#include <stdio.h>
int main()
{
	int a[3][2] = { (0,1),(2,3),(4,5) };
	int* p;
	p = a[0];
	printf("%d\n", p[0]);
	return 0;
}

 【答案解析】

第五题

#include <stdio.h>
int main()
{
	int a[5][5];
	int(*p)[4];
	p = a;
	printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
	return 0;
}

 【答案解析】

第六题

#include <stdio.h>
int main()
{
	int a[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = (int*)(&a + 1);
	int* ptr = (int*)(*(a + 1));
	printf("%d %d", *(p - 1), *(ptr - 1));
	return 0;
}

【答案解析】

第七题

#include <stdio.h>
int main()
{
	char* a[] = { "work","at","alibaba" };
	char** p = a;
	p++;
	printf("%s\n", *p);
	return 0;
}

 【答案解析】

第八题

#include <stdio.h>
int main()
{
	char* c[] = { "ENTER","NEW","POINT","FIRST" };
	char** cp[] = { c + 3,c + 2,c + 1,c };
	char*** cpp = cp;
	printf("%s\n", **++cpp);
	printf("%s\n", *-- * ++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);
	return 0;
}

 【答案解析】

 

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

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

相关文章

微信支付账户更换实名认证微信钱包零钱余额还在吗?怎么更换微信钱包实名认证?

原文来源&#xff1a;https://www.caochai.com/article-4119.html 微信支付账户更换实名认证微信钱包零钱余额还在吗&#xff1f; 微信支付账户更换实名认证微信钱包的零钱余额将清空&#xff0c;因为更换微信钱包实名认证的前提条件是微信钱包零钱余额不能大于0元。所以&…

一周学习总结(2022.1.25)

文章目录前言本周任务完成情况1.《Vue.js的设计与实现》2.《计算机网络&#xff1a;自顶向下方法》3.组件库4.青训营笔记5.刷题总结前言 年前给自己定下了一组学习计划&#xff0c;安排了每天需要完成的事情。这里主要记录一下每周任务的完成情况。本周定制的任务主要围绕着《V…

DP初入门

目录 一、前言 二、DP概念 1、最少硬币问题 2、DP的两个特征 三、0/1背包&#xff08;最经典的DP问题&#xff09; 1、小明的背包1&#xff08;lanqiaoOJ题号1174&#xff09; 2、空间优化&#xff1a;滚动数组 1&#xff09;交替滚动 2&#xff09;自我滚动 一、前言…

C语言函数调用详解

所谓函数调用&#xff08;Function Call&#xff09;&#xff0c;就是使用已经定义好的函数。函数调用的一般形式为&#xff1a;functionName(param1, param2, param3 ...);functionName 是函数名称&#xff0c;param1, param2, param3 ...是实参列表。实参可以是常数、变量、表…

【Java开发】Spring Cloud 10 :Stream消息驱动

官方定义Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它为一些供应商的消息中间件产品提供了个性化的自动化配置实现&#xff0c;Spirng Cloud Stream 本质上就是整合了 Spring Boot 和 Spring Integration&#xff0c;实现一套轻量级的消息驱动的微服…

Python内置包Tkinter的重要控件(下)

本文将接着介绍剩下的五个重要的控件&#xff0c;包括Canvas&#xff0c;Messagebox&#xff0c;Listbox&#xff0c;Checkbutton&#xff0c;Radiobutton。 目录 前言 控件 1. Canvas 2. Messagebox 3. Listbox 4. Radiobutton 5. Checkbutton 总结 前言 包括但不…

VBA提高篇_08 数据源类型判断 / 四舍五入

文章目录数据类型操作1. 数据类型判断2.数据类型转换2.1转换函数2.2 关于小数数据类型的四舍五入2.2.1 银行家舍入法2.2.2 Round()函数2.2.3 Int()函数数据类型操作 1. 数据类型判断 IsDate() 是否是日期类型 IsNumeric() 是否是数值类型 TypeName(x) 返回x 的数据类型的名称…

移动端特点和flex布局

移动端特点和flex布局移动端特点物理分辨率和逻辑分辨率视口视口标签二倍图百分比布局flex布局主轴对齐方式侧轴对齐方式伸缩比圣杯布局移动端特点 PC端/移动端不同 PC端 屏幕大&#xff0c;网页固定版心浏览器繁多&#xff0c;更多考虑兼容性问题。&#xff08;布局&#xf…

Gin+Vite实现单图上传

前言 参考文献&#xff1a;https://blog.csdn.net/heian_99/article/details/122447855 案例目的&#xff1a;实现前端上传图片并显示&#xff0c;后端保存图片&#xff1b; 技术&#xff1a;elementplus、axios、vue3、vite、gin 实现原理&#xff1a; 前端请求对应后端接口…

连通性1(Tarjan 理论版)

目录 一、无向图割点、桥、双连通分量 Tarjan 算法求割点和桥&#xff08;割边&#xff09; “割点”代码 边双和点双连通分量 边双连通分量 和 点双连通分量 的缩点 二、有向图强连通分量 1.有向图的弱连通与强连通 2.强连通分量 Kosaraju算法 Tarjan 算法&#xff08…

读书笔记:Python绘制三维图像 ← 斋藤康毅

下文给出了绘制函数 的 Python 代码。 很显然&#xff0c;这是一个三维图像。【绘制三维图像的Python代码】 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dfigplt.figure() axAxes3D(fig) x1np.arange(-3.0, 3.0, 0.1) x2np.…

python刷题-关于日期、正则表达式的题

目录标题1、计算日期范围内的所有日期2、将Unix时间戳转换为格式化日期3、计算日期数据周同比4、正则表达式判断字符串是否是日期5、从文本中提取手机号码 --正则表达式6、批量提取网页上的手机号码7、自动提取电子邮箱地址8、验证用户密码是否规范-re.findall9、提取商品价格1…

ELK简介

什么是ELKE: Elasticsearch全文搜索引擎L: logstash日志采集工具K: kibana ES的可视化工具ELK是当今业界非常流行的日志采集保存和查询的系统我们编写的程序,会有很多日志信息,但是日志信息的保存和查询是一个问题IDEA控制台是一个临时显示的位置,我们可以将它保存在文件中但是…

Jetpack架构组件库:Room

Room Room是一款轻量级orm数据库&#xff0c;本质上是一个基于SQLite之上的抽象层。它通过注解的方式提供相关功能&#xff0c;编译时自动生成实现Impl&#xff0c;相比纯 SQLite 的API使用方式更加简单。另外一个相比于SQLite API的优势是&#xff1a;它会在编译时检查 SQL 语…

SpringBoot+Vue项目在线视频教育平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

网络原理之HTTP/HTTPS、TCP、IP四层协议栈

文章目录一、应用层&#xff08;一&#xff09;xml协议&#xff08;二&#xff09;json协议&#xff08;三&#xff09;protobuffer协议&#xff08;四&#xff09;HTTP协议1. 抓包工具&#xff0c;fiddler2. HTTP报文格式3. HTTP请求(Request)&#xff08;1&#xff09;URL基本…

【VisualBasicApplication】Excel编程

VBAExcel的宏与VBA宏的录制宏的启动运行快捷键运行宏&#xff1a;使用Excel对象运行宏*VBA的数据类型字符串&#xff08;String&#xff09;整形&#xff08;Integer&#xff09;和长整形&#xff08;Long&#xff09;单精度浮点型&#xff08;Single&#xff09;和双精度浮点型…

3.mysql查询必备sql语句

文章目录1.条件查询 where2. 通配符与模糊查询3. 映射4. 排序 order_by5. 取部分 limit 和offset6. 分组 group by7.左右连表 left outer join ... on8. 联合查询 union1.条件查询 where 表内容&#xff1a; import pymysqlconn pymysql.connect(host127.0.0.1,port3306,u…

向QAbstractItemView子类如:QTreeView、QTableView等子项单元格插入窗体小部件的功能实现(第2种方法)

1.前言工作中经常会遇到这样的需求&#xff1a;向QAbstractItemView子类如QTreeView、QTableView单元格插入窗体小部件&#xff0c;如&#xff1a;进度条、按钮、单行编辑框等。下面链接的系列博文就是讲解如何实现该功能的。《向QAbstractItemView子类如:QTreeView、QTableVie…

LeetCode 2500. 删除每行中的最大值

给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&#…