笔试题详解(C语言进阶)

news2024/11/22 16:17:13

前言

        欢迎阅读本篇文章!本篇文章通过一个笔试题来加强我们对C语言的理解,希望对你有帮助。后续我会写一个栏目,集合我见到的C语言题目,进行分析讲解。

1、题目一

        判断下面程序的输出结果:(下面说的地址4/8字节是因为对于不同的编译环境地址的大小不同,32位环境为4字节,64位环境为8字节)

#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;
}

        我们可以尝试去写出这些代码的输出结果,然后我将放出答案,参照答案看是否有不同。 

1.2结果

        这个结果是否符合你的预期呢?

1.3 分析

        我们对语句进行逐一分析:

    printf("%d\n", sizeof(a));              //16

  sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节   

 printf("%d\n", sizeof(a + 0));            //4

 a不是单独放在sizeof内部,也没有取地址,所以a就是首元素的地址,a+0还是首元素的地址,只要是地址,大小就是4/8个字节

 printf("%d\n", sizeof(*a));                //4

   这里的a表示的是首元素的地址,*a表示首元素,首元素为整形,大小为4字节

 printf("%d\n", sizeof(a + 1));            //4

   a是首元素的地址,a+1是第二个元素的地址,大小为地址的大小,为4/8字节

   printf("%d\n", sizeof(a[1]));            //4

 a[1]为数组第二个元素,为整型,大小为4四字节

    printf("%d\n", sizeof(&a));                //4

 &a取出的是数组的地址,地址大小就是4/8字节

 printf("%d\n", sizeof(*&a));            //16

这个重点讲一下:a和&先结合,成为一个指向整个数组的指针,然后*访问它,访问出来一整个数组,因此大小为整个数组的大小,为16                
    

printf("%d\n", sizeof(&a + 1));            //4

 &a+1还是一个地址,地址大小还是4/8,只不过这里加1直接跳过整个数组指向了数组后面一个地址。

printf("%d\n", sizeof(&a[0]));            //4

a[0]是数组首元素,&a[0]取出首元素的地址,所以大小为int类型大小,4字节

 printf("%d\n", sizeof(&a[0] + 1));        //4

&a[0]是首元素地址,&a[0]+1是第二个元素的地址,大小为int类型大小,4字节

2、题目二

#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;
}

        同样地,先自己算算吧,有了上面的案例,我相信你做这道题的正确率会提高很多。

2.1 结果 

        下面进行分析

2.2 分析

printf("%d\n", sizeof(arr));			//6

数组名单独放在sizeof内部,表示整个数组的大小,为6

printf("%d\n", sizeof(arr + 0));		//4

arr + 0 是数组首元素的地址,大小为4/8字节

printf("%d\n", sizeof(*arr));			//1

 *arr就是首元素,大小是char类型的大小,为1

printf("%d\n", sizeof(arr[1]));			//1

arr[1]同样为数组的首元素,大小为char类型的大小,1字节

printf("%d\n", sizeof(&arr));			//4

 &arr是数组地址,是地址就是4/8字节

printf("%d\n", sizeof(&arr + 1));		//4

&arr + 1,指向整个数组后面一个位置的地址,也还是地址,是地址,大小就是4/8字节

printf("%d\n", sizeof(&arr[0] + 1));	//4

 &a[0]是数组第一个元素的地址,+1指向第二个元素,还是地址,大小为4/8字节

3、结语

        这样两道题目就分析完了,希望对你有所帮助。

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

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

相关文章

使用Outlook邮箱保护您的隐私

在数字时代&#xff0c;我们的电子邮件地址就像是我们的数字身份证&#xff0c;它连接着我们的个人信息和网络世界。无论是注册新服务、购物还是预订餐桌&#xff0c;电子邮件地址都是我们身份的关键部分。然而&#xff0c;这也使我们容易受到垃圾邮件和隐私泄露的影响。但是&a…

基于ImageSharp实现趣味横生的点选验证

引言 随着安全需求的不断提升&#xff0c;传统的文本验证码已经无法满足防止机器自动识别和攻击的要求。点选式验证码作为一种交互式的验证手段&#xff0c;因其更难被自动化脚本破解而逐渐受到欢迎。利用开源图像处理库SixLabors.ImageSharp来实现点选式验证码功能。 ImageS…

将从excel 文件里获取的时间转换成标准时间

new Date(new Date(1900, 0, data.PostingDate).setDate(new Date(1900, 0, data.PostingDate).getDate()-1))

IDA按F5反汇编伪代码错误Please use ida (not ida64) to decompile the current file

IDA不能F5反汇编成为伪代码&#xff0c;提示Warning Please use ida (not ida64) to decompile the current file 不给我转伪代码&#xff0c;不让我用ida64&#xff0c;哪我就用ida32 换32位IDA果然可以了 又可以愉快的玩耍了

2024年1月京东平板电视行业分析:TOP10品牌销量及销额排行榜

鲸参谋监测的京东平台1月份平板电视市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年1月份&#xff0c;京东平台上平板电视的销量将近120万件&#xff0c;环比上个月增长约70%&#xff0c;同比去年下滑43%&#xff1b;销售额约34亿元&#xff…

指针的进阶(C语言)(上)

目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2 数组名VS&数组名 3.3数组指针的运用 前言 对于指针&#xff0c;我们已经有了初步认识&#xff08;可以看我写的指针详解那一篇文章&#xff09;。 简单总结一下基本概念&#xff1a; 1、指针就…

C# Winfrom实例:武汉智能安检闸机数据接收和解析

项目介绍&#xff1a;本实例主要是接收安检闸机的数据解析并显示到界面上&#xff0c;只做功能实现&#xff0c;不做界面美化 硬件&#xff1a;闸机一个、网线一根、电脑主机开发环境&#xff1a;vs2017 系统&#xff1a;win10涵盖知识点&#xff1a;tcp通讯、文件写入、多线程…

通过Linux终端搭建基于HTTP隧道的文件传输系统

嘿&#xff0c;Linux小侠们&#xff0c;准备好挑战一项酷炫的任务了吗&#xff1f;今天我们要一起通过Linux终端搭建一个基于HTTP隧道的文件传输系统&#xff0c;让我们的文件在网络的海洋中畅游无阻&#xff01; 在开始之前&#xff0c;让我们先来想象一下这个场景&#xff1…

吃个桃桃~

解法&#xff1a;暴力、排序 #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; #define endl \n struct tree {int index;int peach; }; bool cmp(tree a,tree b) {if (a.peach ! b.peach)return …

提升数据库操作技能:发现MyBatis-Plus学习网站的无限可能!

介绍&#xff1a;MyBatis-Plus是一个对MyBatis框架进行增强的工具&#xff0c;旨在简化开发流程并提升开发效率。以下是MyBatis-Plus的一些主要特点&#xff1a; CRUD操作简化&#xff1a;MyBatis-Plus提供了一些列的CRUD操作方法&#xff0c;这些方法已经封装好&#xff0c;可…

计算机服务器中了devos勒索病毒怎么办?Devos勒索病毒解密数据恢复

网络技术的不断发展与更新&#xff0c;为企业的生产运营提供了有利保障&#xff0c;企业的生产运营离不开数据支撑&#xff0c;通过企业数据可以综合调整发展运营方向&#xff0c;但网络是一把双刃剑&#xff0c;近期&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0…

文件系统创建分区

目录 一、EXT4文件系统创建分区 1.使用 fdisk 分区 2.格式化写入文件系统 3.挂载 临时挂载 永久挂载 二、XFS文件系统创建分区 1.使用 gdisk 分区 2.格式化写入文件系统 3.挂载 临时挂载 永久挂载 三、创建swap分区 1.查看文件系统 2.新建swap分区 3.格式化分区 …

CSP-202006-2-稀疏向量

CSP-202006-2-稀疏向量 【60分思路-暴力枚举】 显然u[100000000], v[100000000]过不了7,8,9,10的样例&#xff0c;但是思路也比较简单易懂&#xff0c;初学者可以参考 #include <iostream> using namespace std; int u[100000000], v[100000000]; long long inner; in…

Java中的关键字

✨✨ 所属专栏&#xff1a; Java基石&#xff1a;深入探索Java核心基础✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; Java中的关键字是一些具有特殊含义的单词&#xff0c;它们在语法中有特定的用途&#xff0c;不能用作标识符&am…

ai写作工具哪具好,3款AI写作软件来揭晓

ai写作工具在当今信息爆炸的时代中正变得越来越受欢迎。随着人工智能技术的不断发展&#xff0c;越来越多的AI写作软件涌现出来&#xff0c;它们的功能和性能也日益完善。在这篇文章中&#xff0c;我们将揭晓3款备受推崇的AI写作软件&#xff0c;探讨它们各自的特点和优势。 第…

网络机顶盒哪个好?内行分享网络机顶盒排名

网络机顶盒是电视机的必备搭配&#xff0c;依然是不可缺少的部分&#xff0c;我作为网络机顶盒的从业者&#xff0c;经常给被问到的就是网络机顶盒哪个好&#xff0c;不同品牌之间差异较大&#xff0c;今天给大家分享业内最新发布的网络机顶盒排名&#xff0c;看看目前哪些网络…

前端简单知识复习

1.symbol类型 Symbol 是 ECMAScript 6 中引入的一种新的基本数据类型&#xff0c;它表示独一无二的值。Symbol 值是通过 Symbol() 函数创建的。 Symbol 值具有以下特点&#xff1a; 独一无二性&#xff08;唯一性&#xff09;&#xff1a;每个通过 Symbol() 函数创建的 Symb…

泛微e-office系统存在敏感信息泄露 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 泛微e-office系统简介 微信公众号搜索:南风漏洞复…

阿里云国际-在阿里云服务器上快速搭建幻兽帕鲁多人服务器

幻兽帕鲁是最近流行的新型生存游戏。该游戏一夜之间变得极为流行&#xff0c;同时在线玩家数量达到了200万。然而&#xff0c;幻兽帕鲁的服务器难以应对大量玩家的压力。为解决这一问题&#xff0c;幻兽帕鲁允许玩家建立专用服务器&#xff0c;其提供以下优势&#xff1a; &am…

Ubuntu22部署MySQL5.7详细教程

Ubuntu22部署MySQL5.7详细教程 一、下载MySQL安装包二、安装MySQL三、启动MySQL检查状态登录MySQL 四、开启远程访问功能1、允许其他主机通过root访问数据库2、修改配置文件&#xff0c;允许其他IP通过自定义端口访问 五、使用Navicat连接数据库 默认情况下&#xff0c;Ubuntu2…