C++基础知识1

1、在C++程序在调用C编译器编译后的函数,为什么需要加extern C?
首先,extern是C/C++中的表明函数的的全局变量范围的关键字,该关键字告诉编译器,其声明的函数可以在本模块和其他模块中使用。
被extern修饰的变量和函数是按照C语言方式编译和连接的,C++支持重载,在被编辑是需要包含函数名、函数参数数量以及类型信息,C被编译时只需要函数名就行。
2、头文件中的ifndef、define、endif有什么作用
这是C++预编译头文件保护符,保证即使文件被多次包含,头文件也被定义一次。
3、#include<file.h>和#incldue“file.h”的区别?
前者是从标准库路径中寻找并引用file.h,后者是从当前工作路径中寻找并引用filh.h。
4、const和#define有什么区别?
(1)、都可以定义常量、但是const用途更广。
(2)const定义的常量是有数据类型的且占内存空间,而define定义的常量是没有数据类型的而不占内存空间。编译器可以对前者进行类型检查,对后者只进行字符替换,没有类型安全检查。
5、sizeof小结
(1)、sizeof不计算静态变量占的内存;
(2)、32位的指针大小是4字节,64位的指针大小是8字节,而不管指针的类型;
(3)、一个空类占用1个字节,单一继承的空类占1个字节,虚继承涉及到虚指针所以占用4个字节;
(4)、若指定了数组的长度,则不看元素个数,总字节数=数组长度*siziof(元素类型)
(5)、在默认情况下,为方便对结构体内元素的访问和管理,当结构体内元素长度小于处理器位数的时候,便以结构体内最长的数据元素的长度为对齐单位,即为其整数倍。若结构体内的元素长度大于处理器位数则以处理器位数为单位对齐;
(6)、unsigned影响的只是最高位的意义,数据长度不糊改变;
(7)、对函数使用sizeof,在编译阶段会被函数的返回值的类型取代;
(8)、sizeof后面如果是类型名则必须加括号,如果是变量名怎可以不加括号,sizeof是操作符;
(9)、当使用结构类型或者变量时,sizeof返回实际大小,当使用静态数组时返回的是数组的全部大小。sizeof不能返回动态数组或者外部数组的尺寸。
6、sizeof和strlen的区别?
(1)、sizeof返回类型是size_z(unsigned int);
(2)、sizeof是运算符、strlen‘是函数;
(3)、sizeof可以用类型做参数。其参数可以是任意类型或者是变量、函数,strlen只能用char*做参数,且必须是’\0’结尾;
(4)、数组做sizeof的参数时不会退化为指针。而传递给strlen时就退化为指针;
5、sizeod是编译时的常量,而stelen要到运行时才会计算出来,且返回的是字符串中字符的个数而不是内存的大小。
7、指针和引用的区别?
(1)、指针定义时可以不初始化,而引用在定义时就必须初始化,和一个对象绑定,只要引用存在,就会一直保持和该对象的绑定;
(2)、赋值行为的差异,指针赋值是将指针重新指向另外一个对象,而应用赋值就是修改对象本身;
(3)、指针之间存在类型转换,而引用分为const引用和非const引用,非const引用只能和同类型的对象绑定,const引用可以绑定到不同但相关类型的对象或者右值。
8、数组和指针的区别?
(1)、数组要么在全局数据区被创建,要么在栈上被创建,指针可以指向人类类型的数据区;
(2)、修改数据内容上的差别:
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”;
p[0] = ‘X’; //编译器不能发现该错误,运行时错误
(3)、sizeof(数组)可以计算出数组的总字节数,sizeof§得到的是指针占用几个字节,而不是指针所指向的内存容量,指针说到底就是一个变量。
9、空指针和悬挂指针的区别?
1、空指针是被赋值为nullptr的指针,delete指向动态内存分配对象的指针将会产生悬挂指针;
2、空指针可以被删除多次,而悬挂指针再次删除时程序会变得很不稳定。
10、C++中有malloc/free,为什么还要有new/delete?
(1)、malloc是标准库函数,new是运算符,都可以用于动态申请和释放内存;
(2)、malloc在申请内存时需要指定分配内存的字节数,而且不会做初始化,申请成功后返回的是一个void*,需要手动转换数据类型,new在申请内存时不需要指定内存的大小,而且有默认的初始化,申请成功后返回的是一个对象类型;
(3)、malloc不能被重载,new类可以被重载;
(4)、malloc在申请内存失败时返回nullptr,new会抛出异常;
(5)、对于类类型的对象而言,用mallo无法满足要求。对象在创建的时候要自动执行构造函数,消亡时自动执行析构函数。由于malloc是库函数不是操作符,不再编译器控制之内,不能把构造函数和析构函数任务强加给它,因此C++需要new/delete。

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

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

相关文章

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…

【洛谷 P5730】【深基5.例10】显示屏 题解(数组+循环)

【深基5.例10】显示屏 题目描述 液晶屏上&#xff0c;每个阿拉伯数字都是可以显示成 3 5 3\times5 35 的点阵的&#xff08;其中 X 表示亮点&#xff0c;. 表示暗点&#xff09;。现在给出数字位数&#xff08;不超过 100 100 100&#xff09;和一串数字&#xff0c;要求输…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

大文件上传,前端vue 做分片上传

html – 以弹窗的形式 <!-- 上传算法文件 --> <el-dialog title"上传算法文件" :visible.sync"uploadPop" width"60%" :close-on-click-modal"false" :before-close"closeUploadPop" append-to-body custom-class…

【C语言】24-共用体类型、枚举类型与typedef

目录 1. 共用体类型1.1 如何定义共用体类型1.2 引用共用体变量的方式1.3 共用体类型数据的特点2. 枚举类型2.1 如何声明和使用枚举类型2.2 枚举类型的用处3. typedef3.1 为简单类型取别名3.2 为复杂类型取别名3.2.1 为结构体类型取别名3.2.2 为数组取别名3.2.3 为指针类型取别名…

2023.10.07

#include <iostream>using namespace std;int main() {string str;cout << "请输入字符串&#xff1a;";getline(cin,str);int big0,little0,spac0,num0,sym0;int sizestr.size();for(int i0;i<size;i){if((int)str.at(i)<6526 && (int)st…

如何开发一款高效便捷的搬家服务小程序

随着互联网的发展&#xff0c;小程序已成为各行各业重要的业务推广和用户服务平台。对于搬家行业而言&#xff0c;开发一款高效便捷的搬家服务小程序具有巨大的市场潜力。本文将为您详细介绍如何开发一款这样的搬家服务小程序。 一、进入乔拓云网后台 在开始制作搬家服务小程序…

haproxy使用

haproxy使用 安装使用yum安装 配置文件global 全局配置Proxies配置Proxies配置-defaultsProxies配置-listen 简化配置 安装 社区版官网链接&#xff1a;http://www.haproxy.org CentOS 7 的默认的base仓库中包含haproxy的安装包文件&#xff0c;但是版本比较旧&#xff0c;是1…

NPDP怎么报名?考试难度大吗?

PMDA&#xff08;Product Development and Management Association&#xff09;是美国产品开发与管理协会&#xff0c;在中国由中国人才交流基金会培训中心举办NPDP&#xff08;New Product Development Professional&#xff09;考试&#xff0c;该考试是产品经理国际资格认证…

ICE综述

ICE综述 ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件&#xff0c;基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作&#xff0c;将基础对象操作和数据库操作封装在这一层&#xff0c;在业务逻辑层以及…

leetcode 518. 零钱兑换 II、377. 组合总和 Ⅳ

518. 零钱兑换 II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 …

Pyside6 安装和简单界面开发

Pyside6 安装和简单界面开发 Pyside6介绍Pysied6开发环境搭建Python安装Pysied6安装 Pyside6界面开发简单界面设计界面设计界面编译 编写界面初始化代码软件打包 Pyside6介绍 对于Python的GUI开发来说&#xff0c;Python自带的可视化编程模块的功能较弱&#xff0c;PySide是跨…

玩转Mysql系列 - 第27篇:mysql如何确保数据不丢失?

这是Mysql系列第27篇。 本篇文章我们先来看一下mysql是如何确保数据不丢失的&#xff0c;通过本文我们可以了解mysql内部确保数据不丢失的原理&#xff0c;学习里面优秀的设计要点&#xff0c;然后我们再借鉴这些优秀的设计要点进行实践应用&#xff0c;加深理解。 预备知识 …

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER EDGEBoost I/O模块是一种可扩展的模块化解决方案&#xff0c;集成到Premio的工业计算机中&#xff0c;通过即插即用的可扩展性提供增强的可靠性。这些附加模块有助于解决在加固边缘出现的设计限制和兼容性问题。…

JDBC-day01(JDBC概述,获取数据库连接)

一&#xff1a;JDBC概述 1.数据持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多通过各种关系数据库来完成。简单来…

【Python】

Jupyter notebook中报错&#xff0c;出现kernel error解决方法 https://blog.csdn.net/weixin_44457768/article/details/106027628Anaconda-- conda 创建、激活、退出、删除虚拟环境 https://blog.csdn.net/hejp_123/article/details/92151293镜像 anaconda清华大学开源软件…

gorm 自定义时间、字符串数组类型

文章目录 自定义时间类型自定义字符串数组测试与完整代码测试代码测试结果 GORM 是GO语言中一款强大友好的ORM框架&#xff0c;但在使用过程中内置的数据类型不能满足以下两个需求&#xff0c;如下&#xff1a; time.Time类型返回的是 2023-10-03T09:12:08.5352808:00这种字符串…

美国各流域边界下载,并利用arcgis提取与处理

一、边界数据的下载 一般使用最普遍的流域边界数据是从HydroSHEDS官网下载: HydroBASINS代表一系列矢量多边形图层&#xff0c;以全球尺度呈现次级流域边界。该产品的目标是提供一种无缝的全球覆盖&#xff0c;其中包含了不同尺度&#xff08;从数十到数百万平方千米&#xf…

Zygote Secondary:加速应用启动的未来之路

Zygote Secondary&#xff1a;加速应用启动的未来之路 1. 引言 在现代的移动应用开发中&#xff0c;启动速度和响应性能是用户体验的重要方面。然而&#xff0c;传统的 Android 进程管理方式在启动应用时会出现性能瓶颈&#xff0c;导致启动时间过长和资源占用过多。为了解决…