常见C语言基础题说明一

一.  简介

整理一些C语言常见的基础笔试题。

假如系统是 32位计算机的情况下,字节对齐方式为 4字节对齐。计算如下题目。

二.  常见C语言基础笔试题

1.  计算 sizeof(数组名), sizeof(指针),strlen(数组名) 大小

计算如下的变量的值:

#include <stdio.h>int main(void)
{ char str[] = "123456";char *ptr;int b[100] = "0123456789";printf("%d, %d, %d\n", sizeof(str), sizeof(ptr), strlen(str));printf("%d\n", sizeof(b));return 0;
}

打印结果如下:

7, 4, 6
400

分析:

sizeof在编译时期就计算出来,strlen在运行之后才能计算出来。

strlen 计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。strlen参数只能是char*,且必须是以 '\0' 结尾。

sizeof 计算声明后所占的内存数(字节大小),不是实际长度。

为什么需要 sizeof ?
主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统中为4字节,在16位系统中为2字节···)。所以程序中需要使用 sizeof 来判断当前变量/数据类型在当前环境下占几个字节。

sizeof(str):char str[] 这里的  str是一个数组,sizeof(str) 即计算数组,因为内部是字符串,所以包括 '\0' 位置,所以为  sizeof(str)为 6+1,即 7。

sizeof(ptr) ptr是一个  char类型的指针,注意是指针,而 32位系统中 指针所占用的字节大小为 4字节,所以,sizeof(ptr) 为 4,。也就说无论什么类型的指针,sizeof(ptr) 都是 4字节(对于 32位计算机系统而言)。

sizeof(b) :因为 b为 int 类型数组,而一个 int类型占 4字节(32位计算机系统中)所以,sizeof(b) 为 4*100,即 400。

strlen(str):  strlen() 是计算字符串长度,不包括字符串结束符 '\0'。所以, strlen(str)为 6.

2.  结构体指针 + 1

结构体指针加 1操作:

#include <stdio.h>
#include <stdlib.h>typedef struct tagDev_INFO_S{int a;int b;int c;int d;
} DEV_INFO_S;int main(void)
{ DEV_INFO_S * pstDevInfo = malloc(sizeof(DEV_INFO_S)*8);printf("pstDevInfo: %p\n", pstDevInfo);printf("pstDevInfo+1: %p\n", pstDevInfo+1);return 0;
}

打印结果如下:

可以看出,结构体指针 +1的意思就是,也就是加一个步进,步进的大小就是指向的类型的 sizeof的结果。

这里结构体大小为  4字节*4 = 16字节,结构体指针加 1,也就是 相差一个结构体大小即 16个字

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

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

相关文章

npm无法安装node-sass 的问题

安装 node-sass 的问题呈现&#xff1a;4.9.0版本无法下载 Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-72_binding.node Cannot download "https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-…

JavaScript检测数组类型

在JavaScript中&#xff0c;可以使用typeof操作符检测一个变量的数据类型。对于数组类型来说&#xff0c;typeof操作符返回的结果是"object"。 虽然typeof操作符可以用来检测数组类型&#xff0c;但它并不能区分数组和其他对象类型。为了准确地检测一个变量是否是数…

Verilog 触发器状态机语言描述-条件语句

条件语句 调试探针条件 调试探针条件可在双向或三向分支条件语句中使用。每个调试探针条件都占用调试探针连接到的 ILA 的 PROBE 端口上 的 1 个触发器比较器。 重要提示 &#xff01; 每个 PROBE 端口都可包含 1 到 16 个触发器比较器 &#xff08; 在编译时配置 &a…

MySQL调优-01反范式化表设计

MySQL调优-01反范式化表设计 数据库设计三范式 第一范式&#xff08;1NF&#xff09;。确保数据库表的每一列都是不可分割的原子数据项&#xff0c;即列中不可包含数组、记录等非原子数据项&#xff1b;确保表中没有重复的属性或列&#xff0c;每个属性只出现一次&#xff0c;…

技术速递|介绍 .NET MAUI 社区工具包 v8 :包含 TouchBehavior 支持!

作者&#xff1a;Gerald Versluis 排版&#xff1a;Alan Wang .NET MAUI 社区工具包团队很自豪地向您介绍 .NET MAUI 社区工具包的第 8 版&#xff01; 在这个最新的主要版本中&#xff0c;我们为您带来了备受期待的 TouchBehavior&#xff08;以前称为 TouchEffect&#xff0…

Hutool 只复制不为空的属性

在使用 Hutool 的工具类进行复制时&#xff0c;有时候需要只复制不为空的属性。 比如在修改时&#xff0c;先把数据库中的数据查出来&#xff1a; SysArea sysArea getById(dto.getId());此时再以传入值复制到数据库表对象中&#xff0c;但如果传入值中有属性为null&#xf…

MM模块学习一(供应商创建,物料类型的定义及功能)

物料管理流程&#xff1a; 源头&#xff1a;采购需求->采购申请 MRP&#xff1a;物料需求计划。运行物料需求计划的结果&#xff0c;根据物料的性质来判断是外购&#xff08;采购申请&#xff09;或者是生产&#xff08;计划订单->生产订单&#xff09;。 采购申请&am…

力扣:最大子数组和

在这里和大家分享一下关于最大子数组和、最小子数组和的算法题。 其中最大子数组在力扣刷题中遇到&#xff0c;最小子数组和在笔试中遇到&#xff0c;虽然一个为最大&#xff0c;一个为最小&#xff0c;但是它们的思路完全一样&#xff0c;而且在写法上也是对称的&#xff0c;…

Termux安装某个Python包时只能pip install但是又出错的解决办法

在安装pandas时用pkg search pandas是没有内容的&#xff0c;这时候只能用pip install pandas安装&#xff0c;但是途中一定会报错&#xff0c;导致安装失败&#xff0c;解决办法是先安装tur-repo&#xff0c;即 pkg install tur-repo 然后搜索pandas&#xff0c;有pkg安装包…

Thinkphp5 中常见的session 操作方法

在 ThinkPHP 框架中&#xff0c;session 是用于在多个页面或请求之间存储用户信息的机制。以下是在 ThinkPHP 中进行 session 常见操作的一些示例&#xff1a; 启动 Session 在 ThinkPHP 中&#xff0c;通常不需要手动启动 Session&#xff0c;因为框架会在应用启动时自动处理…

在Linux中安装Docker

如果之前安装过旧版本的 Docker&#xff0c;可以使用下面命令卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine…

500的项目研发成本2000?

上个月接了一个小程序的二开项目&#xff0c;功能不多就2个诉求&#xff1a;调整首页数据排序规则&#xff0c;帖子详情增加一个海报&#xff0c;报了一个我认为还比较合适的价格500。 当我拿到代码的那一刻有点小害怕&#xff0c;因为这个客户的之前合作过一次&#xff0c;项…

17.接口自动化学习-日志

1.日志输出渠道 &#xff08;1&#xff09;文件格式 xx.log &#xff08;2&#xff09;控制台输出 2.日志级别 debug<info<warnning<error<critical 3.代码实现 from utils.handle_path import log_path import logging import datetime def logger(fileLogTr…

LeetCode 35.搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…

数值计算方法——大题题型总结

目录 一、绝对误差限、相对误差限 1.1 例题 1.2 解题套路 1.3 题解 二、敛散性、收敛速度 2.1 例题 2.2 解题套路 2.3 题解 三、牛顿迭代法 3.1 例题 3.2 解题套路 3.3 题解 四、割线法 4.1 例题 4.2 解题套路 ​4.3 题解 五、列主元素消去法 5.1 例题 5.…

|Python新手小白中级教程|第二十六章:面向对象编程(示例操作)(2)

文章目录 前言实操一、分析游戏《外星人入侵》的初始化代码实操二、自制游戏的初始化数据总结 前言 大家好&#xff0c;我是你们的BoBo仔吖&#xff0c;今天我们学习的东东是续上节课的内容。上节课我们初识对象编程操作class类&#xff0c;今天我们就来实操 实操一、分析游戏…

Ansible——playbook编写

一、简介 1.什么是playbook Ansible Playbook 是设定自动化任务的一种蓝图&#xff0c;可在无需人工干预或有限干预的前提下执行复杂的 IT 操作。Ansible Playbook 对一组或一类共同构成 Ansible 清单的主机执行。 Ansible Playbook 本质上是一些框架&#xff0c;是一些预先编…

多线程基础知识(全面):创建线程、线程状态如何变化、wait()、notify()、sleep()、停止线程

文章目录 一、创建线程的四种方式1.1 继承Thread类1.2 实现runnable接口1.3 实现Callable接口1.4 线程池创建线程1.5 补充&#xff1a;runnable、callable都可以创建线程&#xff0c;有什么区别&#xff1b;run()和 start()有什么区别 二、线程包括哪些状态、状态之间如何变化2…

第1个数据库:编号,文本,时间,

写一个数据库 编号 文本 时间1 第一个文本 有100万条数据 -- 创建一个名为texts的表格来存储数据 CREATE TABLE texts ( id INTEGER PRIMARY KEY, text TEXT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 插入数据INSERT INTO texts (text) VALUES (第一个文…

书单 | 6本AI领域名家名作,大模型时代,趁风而起!

–文末赠书– 大模型时代&#xff0c;想抓住风口吗&#xff1f; 本期书单就来分享6本AI领域名家名作&#xff0c;给大家把大模型时代那些事儿讲清楚&#xff01; 放心&#xff0c;入门的同学也可以从最基础的学起~~ 快来看看有哪些书吧…… 01 ▊《多模态大模型&#xff1…