【每日C/C++问题】

一、 结构体和联合体有什么区别?能否在声明过程当中缺省名字?(需要写清楚使用方法)

结构体的各个成员占用不同的内存空间,总大小是所有成员大小之和(结构体字节对齐

typedef struct Student {int a;char b;short c;char d;
} stu;
对齐规则:找成员中最大的类型 用他作为字节对齐数求出来的结果一定是对其数的整数倍整数倍的地址对齐
a
bxc
dxxx

        该结构体成员中的最大类型为 int 类型 4 字节,所以按 4 字节对齐,c 为 short 类型占 2 字节由于按整数倍的地址对齐所以不可以紧挨着 b 放,需要在前面补一位再放 c ,d 为 char 类型占 1 字节需要按 4 字节对齐,所以需要在后面补 3 位。 最后求得该结构体所占内存大小为 12 字节。

联合体的所有成员共享一块内存空间,联合体的大小等于其最大成员的大小

typedef union Student {int a;char c;
} stu;

        由于联合体的大小等于其最大成员的大小,所以该联合体所占内存大小为 4 字节。

a(c)aaa

可以用联合体检测大小端存储:

大端存储:低地址放高位高地址放低位

(十进制 1 ,大端存储)

00000000000000000000000000000001

小端存储:高地址放高位,低地址放低位

(十进制 1 ,小端存储)

00000001000000000000000000000000

检测大小端存储代码:

#include<iostream>
using namespace std;
int checkSystem() {union System {int a;char c;char b;} un;un.a = 1;return un.c == 1;
}int main() {cout << checkSystem(); // 输出 1 为小端存储,0 为大端存储 return 0;
}

可以在声明的时候缺省名字: 我们可以在定义的同时 创建该类型的对象,也可以在定义时加上                                                 typedef 对类型起别名 那这样就可以用别名再创建对象了

在定义的同时 创建该类型的对象:

#include<iostream>
using namespace std;
#include <string>
struct{int a;char d;char b;
} stu;int main() {stu.a = 1;cout << stu.a;return 0;
}

输出

1

在定义时加上 typedef 对类型起别名,用别名再创建对象:

#include<iostream>
using namespace std;
#include <string>
typedef struct{int a;char d;char b;
} stu;int main() {stu s;s.a = 1;cout << s.a;return 0;
}

输出

1

二、结构体可以包含函数吗?在 C 和 C++ 中有何不同?

C语言中的结构体通常不包含成员函数,而是使用外部函数来操作结构体的数据。

C++允许在结构体中定义成员函数,这些函数可以访问结构体的私有成员,并且可以像类一样使用封装。

C语言中的结构体没有访问控制的概念,所有成员默认都是公有的,可以直接访问。C++中的结构体可以有访问控制,支持public、private和protected访问修饰符。在C++中,
结构体(struct)的默认访问权限是公有的(public)。这意味着结构体中的成员默认情况
下可以被外部访问。与结构体不同,类(class)的默认访问权限是私有的(private)。
C 中的结构体的使用要加上struct关键字,或者用typedef取别名后直接使用,C++中的结构体使用时不需要加
struct关键字;在 C++ 中直接使用类型名加变量名即可C:struct A{};   int main () {struct A a;}C++:struct A{};int main () {A a;}
C语言中没有构造函数和析构函数的概念。C++中的结构体可以有构造函数和析构函数,允许在创建和销毁结构体实例时执行特定的初始化和清理代码
C的结构体不可以初始化成员,C++中的结构体可以初始化成员变量;
C语言不支持继承,因此结构体不能作为其他结构体或类型的基类。C++支持继承,结构体可以作为基类,允许其他类或结构体继承其属性和方法。

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

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

相关文章

Docker小记

Docker就是将程序和环境一同打包成一个独立的容器&#xff0c;容器和容器之间独立&#xff0c;可以理解为一个app,一个手机就是一个pod&#xff0c;一个pod上可以运行多个容器&#xff0c;容器之间共享磁盘和网络&#xff0c;每个容器仍然运行在自己的进程空间中&#xff0c;有…

Spring Boot代理问题

在 Spring Boot 2.x 中&#xff0c;AOP&#xff08;面向切面编程&#xff09;默认使用 CGLIB&#xff08;Code Generation Library&#xff09;来实现类的代理。CGLIB 代理是通过在运行时生成目标类的子类来增强目标类的方法。这种方式允许对没有实现接口的类进行代理。以下是一…

“不可原谅的漏洞”论文导读

文章《Unforgivable Vulnerabilities》由Steve Christey 2007年撰写&#xff0c;主要探讨了在软件安全领域中那些本可以避免的漏洞&#xff0c;即“不可原谅的漏洞”。这些漏洞通常由于开发者忽视了基本的安全开发实践而存在&#xff0c;且容易被发现和利用。文章提出了建立一套…

正则表达式(Regular Expressions)

正则表达式&#xff08;Regular Expressions, 简称 Regex&#xff09;是一种用于字符串匹配和处理的强大工具&#xff0c;通过特定的模式&#xff08;Pattern&#xff09;描述字符串。它在验证、替换、分割、提取等操作中非常有效。以下是一些基本概念和常见使用场景&#xff1…

文件夹无法访问?全面解析与高效恢复策略

一、文件夹无法访问的困境 在日常的计算机使用中&#xff0c;我们时常会遇到文件夹无法访问的尴尬情况。这种故障表现为双击文件夹时&#xff0c;系统毫无反应&#xff0c;或者弹出“无法访问&#xff0c;拒绝访问”的错误提示。更令人头疼的是&#xff0c;有时文件夹内的文件…

设计模式 策略模式 场景Vue (技术提升)

策略模式 (建议复制编辑器查看更佳) 在给定的 Vue.js 组件代码中&#xff0c;根据optionKey的不同值&#xff0c;展示了不同的表单内容并定义了不同的表单验证规则。在这里&#xff0c;optionMap对象内部定义了不同的策略&#xff08;addAccount、editAccount、editPassword&am…

万字长文详解Hive聚合函数 grouping sets、cube、rollup原理、语法、案例和优化

目录 原理与语法 使用场景 多维度报表生成 复杂的数据分析 实际案例 原理与语法 与GROUPINGSETS的区别 实际案例 原理与语法 与CUBE的对比 实际案例 执行效率比较 优化建议 Hive提供了三个强大的高级聚合函数: GROUPING SETS 、 CUBE 和 ROLLUP ,用于处理复杂的…

长短期记忆网络(LSTM)如何在连续的时间步骤中处理信息

长短期记忆网络&#xff08;LSTM&#xff09;如何在连续的时间步骤中处理信息 长短期记忆网络&#xff08;LSTM&#xff09;是一种高级的循环神经网络&#xff08;RNN&#xff09;&#xff0c;设计用来解决传统RNN在处理长时间序列数据时遇到的梯度消失或爆炸问题。LSTM通过其…

Spring @RequestMapping 注解

文章目录 Spring RequestMapping 注解一、引言二、RequestMapping注解基础1、基本用法2、处理多个URI 三、高级用法1、处理HTTP方法2、参数和消息头处理 四、总结 Spring RequestMapping 注解 一、引言 在Spring框架中&#xff0c;RequestMapping 注解是构建Web应用程序时不可…

飞牛OS在Docker中安装ODOO ERP系统

从后台的Docker镜像库安装一直报错误&#xff0c;无法安装成功&#xff0c;使用以下命令进入OS系统&#xff0c;以下是执行脚本: Start a PostgreSQL server $ docker run -d -e POSTGRES_USERodoo -e POSTGRES_PASSWORDodoo -e POSTGRES_DBpostgres --name db postgres:15 S…

cookie、session、http简单理解

Cookie:以key-value键值对的形式存储一些文本信息数据 并将数据保存在客户端(浏览器) sessionid&#xff08;身份&#xff09; 数据库中有一个seesion表&#xff0c;存放着所有的Session数据&#xff0c; 而sessionid就对应数据库数据这个id&#xff0c;服务器找到对应id的Ses…

VLAN间通信以及ospf配置

目录 1.基础知识介绍 1.1 什么是VLAN&#xff1f; 1.2 VLAN有什么用&#xff1f; 1.3 不同VLAN如何实现通信&#xff1f; 1.4 什么是路由汇总&#xff1f; 1.4.1 路由汇总的好处&#xff1a; 2. 实验 2.1 网络拓扑设计 2.2 实验配置要求 2.2.1 三层交换配置&#xff…

Redis的数据结构

一、Redis概述 Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。与MySQL数据库不同的是&a…

十四届蓝桥杯STEMA考试Python真题试卷第二套第一题

来源&#xff1a;十四届蓝桥杯STEMA考试Python真题试卷第二套编程第一题 题目描述&#xff1a; 给定一个字符串&#xff0c;输出字符串中最后一个字符。 输入描述&#xff1a; 输入一个字符串 输出描述&#xff1a; 输出字符串中最后一个字符 样例输入&#xff1a; hgf 样…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(4)

8.1、实现分区 在模块接口分区文件中不需要声明分区&#xff0c;也可以在模块实现分区文件中进行声明&#xff0c;在一个以.cpp为扩展名的正常源代码文件中&#xff0c;在这种情况下&#xff0c;它是一个实现分区&#xff0c;有时候叫内部分区。这样的分区无法导出&#xff0c;…

随着 AI 技术的不断发展,AI大模型正随着 AI 技术的不断发展,AI大模型正

随着 AI 技术的不断发展&#xff0c;AI大模型正在重塑软件开发流程&#xff0c;从代码自动生成到智能测试&#xff0c;未来&#xff0c;AI 大模型将会对软件开发者、企业&#xff0c;以及整个产业链都产生深远的影响。欢迎与我们一起&#xff0c;从 AI 大模型的定义、应用场景、…

数组对象常用方法合集

1、运算扩展符 ES6通过扩展元素符<font style"color:rgb(71, 101, 130);">...</font>&#xff0c;好比 <font style"color:rgb(71, 101, 130);">rest</font> 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 conso…

MATLAB基础应用精讲-【数模应用】平均绝对误差损失 Mean Absolute Error Loss(附python、R语言和MATLAB代码实现)

目录 前言 几个高频面试题目 RMSE与MAE对比 平均绝对误差和均方误差(L1&L2)比较 MAE与MSE的性质对比 2.1 敏感度 2.2 单位与解释 2.3 数学特性 优缺点分析 3.1 MAE的优缺点 3.2 MSE的优缺点 应用场景 4.1 MAE的应用 4.2 MSE的应用 均方根误差和平均绝对误差的…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统&#xff0c;通常使用两种身份验证模式&#xff1a;Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作&#xff0c;对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…