编程语言C/C++的一些基本概念(一)

(1)简述变量声明和定义的区别。

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义

(2)正确认识sizeof:**

在32位机器中,如下代码:答案为4,23

void example(char acWelcome[]){printf("%d",sizeof(acWelcome));return;
}
void main(){char acWelcome[]="Welcome to Huawei Test";example(acWelcome);printf("\n%d\n", sizeof(acWelcome));return;
}

sizeof括号里面的内容在编译过程中是不被编译的,而是被替代类型。

sizeof的使用场合:
1)sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信;
2)用它可以看看某种类型的对象在内存中所占的单元字节,便于一些类型的扩充;
3)由于操作数的字节数在实现时可能出现变化,建议在涉及操作字节大小时用sizeof代替常量计算。

(3)关于类的占用空间:

在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节;

如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间

虚函数因为存在一个虚函数表,需要4个字节(只算一次),数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间;

sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小

(4)二叉树的遍历:

先序:根左右
中序:左根右
后序:左右根

若要先序和中序序列一致,那么二叉树满足没左子树就好了

(5)关于printf函数和scanf函数

printf("%x,%o,",ch,ch,k);//将ch以16进制输出为61,八进制为141,k参数被忽略。
printf(“k=%%d\n”,k); // %是控制符,用 %% 表示输出一个百分号
C语言 若有说明:int *p,m=5,n;以下正确的程序段是()
A、scanf("%d",&n);p=n;
错在
p = n, 因为p指向的空间为NULL,直接赋值n,会出错
B、p=&n;scanf("%d",*p);
错在scanf,因为是使用的是地址,应该是scanf("%d",p);
C、p=&n;scanf("%d",&p);
同上,应该是scanf("%d",p);
D、p=&n;scanf("%d",p);
可以看看scanf的使用方法,就知道这个是对的。
前面p = &n, 就是说指针指向了变量n,p就是变量n的地址。

(6)线索二叉树定义:

通过考察各种二叉链表,不管二叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。

二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。为了容易找到前驱和后继,有两种方法。一是在结点结构中增加向前和向后的指针fwd和bkd,这种方法增加了存储开销,不可取;二是利用二叉树的空链指针。

现将二叉树的结点结构重新定义如下:
lchild ltag data rtag rchild
其中: ltag=0 时lchild指向左子女;
ltag=1 时lchild指向前驱;
rtag=0 时rchild指向右子女;
rtag=1 时rchild指向后继;

检索二叉树增加了指向其前驱结点和后继结点的指针,无需借助于堆栈,
使用二叉链表存储的二叉树可使用中序遍历,中序遍历的非递归实现用栈完成

(7)malloc和new的区别?

1)malloc和free是标准库函数,支持覆盖;new和delete是运算符,并且支持重载。
2)malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造函数和析构函数功能,用malloc分配空间存储类的对象存在风险;new和delete除了分配回收功能外,还会调用构造函数和析构函数。
3)malloc和free返回的是void类型指针(必须进行类型转换),new和delete返回的是具体类型指针。

(8)指针和引用区别?

1)引用只是别名,不占用具体存储空间,只有声明没有定义;指针是具体变量,需要占用存储空间。
2) 引用在声明时必须初始化为另一变量,一旦出现必须为typename refname &varname形式;指针声明和定义可以分开,可以先只声明指针变量而不初始化,等用到时再指向具体变量。
3)引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。
4)不存在指向空值的引用,必须有具体实体;但是存在指向空值的指针。

编程语言C/C++(一)相关推荐

  1. JavaScript—— 前端编程语言

    JavaScript 前端编程语言   http://caibaojian.com/javascript/ 转载于:https://www.cnblogs.com/highpointengineer/ ...

  2. ae编程语言as_AE开发 入门教程

    此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: /DeveloperKit/Samples/D ...

  3. perl语言编程 第四版_2020年,5 种 将死的编程语言!

    来源 | 码农网译者 | 小峰 曾几何时,几乎每个人都在使用Perl语言编程.但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲.至少我知道有这么个叫做"piecemea ...

  4. 移动应用开发的六大编程语言

    过去五年中,移动应用程序开发行业实现了跨越式增长,改变了全球业务运作方式.随着企业最近使移动应用程序适应其生产力,以及跨平台移动设备的快速创新,它呼吁移动应用程序开发人员使用一种语言和许多可重用代码为 ...

  5. 最新的全球编程语言,操作系统,web服务器等使用率分析报告

    由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告,并每天持续更新. 1.服务器端编程语言排名 http://w3techs.com/technologies/ov ...

  6. 怎样创造计算机语言,如何创建编译成JavaScript的编程语言

    你曾经想过创建自己的编程语言吗?在本文中,我将演示如何使用免费工具和PEG.js解析器生成器快速编写编译为JavaScript的简单语言. 什么是解析器生成器 解析器生成器顾名思义就是一个基于语法.语 ...

  7. java nextline_Java编程语言基础的9根支柱

    Java编程的基础概念包括:数据类型,分支与循环等. 1.HelloWorld 先从最简单的Java程序开始: public class HelloWorld{ public static void ...

  8. python属于哪种类型的语言_Python是什么类型的编程语言,有什么特性

    由于近几年人工智能的不断发展,Python也跟着火了,因为Python是深度学习技术的主流应用编程语言.同时它的应用场景很多,被称为"胶水语言".下面给大家科普一下Python这门 ...

  9. 最早接触到的计算机编程语言——c语言

    最早接触到的计算机编程语言--C语言 在经过入学后计算机导论的熏陶后,在大一的下半学期我终于接触到了一门语言,这也是我们最早接触的计算机编程语言--c语言. 在初学的时候,感觉这门课程十分晦涩,但是当 ...

  10. 区块链技术入门,都涉及哪些编程语言?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 关于区块链的技能掌握,提到最多的就是Go语言和C++.Java,但是很多人产生了歧义,认为只有这几种语言才可以,CDA数 ...

最新文章

  1. 【高并发、高性能、高可用】系统设计经验分享!
  2. android窗口管理机制
  3. ARC中block块作为属性的使用笔记
  4. [XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)
  5. SpaceVim 语言模块 lua
  6. java自定义注解学习笔记
  7. 第 5-4 课:ThreadLocal 详解 + 面试题
  8. python中为什么不支持char_python支持char吗
  9. mysql多类型查询_MYSQL中的多类型查询及高级查询操作
  10. 鸿蒙 OS 尖刀武器之分布式软总线技术全解析!
  11. 架构之美第六章-建筑师的角色
  12. 消费贷之京东白条、蚂蚁花呗和银行信用卡的那些分期“低费率”套路
  13. H3C交换机密码修改
  14. Ultra96安装指导和无线配置
  15. GAMES101 Lec6 反走样与深度缓冲
  16. 常见路由协议总览以及路由协议分类方式
  17. RAC 主机内存条故障导致的一个节点重启
  18. 打开设备管理器出现MMC.EXE被阻止解决办法
  19. Java安全攻防之从wsProxy到AbstractTranslet
  20. 分享微信答题活动制作步骤_制作微信答题活动要注意什么

热门文章

  1. 正则表达式常用符号及python示例
  2. 安装程序“发布者:未知 ”问题
  3. 发那科机器人圆弧指令怎么用_FANUC机器人操作指南
  4. 安川伺服报警代码查询软件
  5. 记一次百度地图的交互开发
  6. 今天搞了个天猫抽奖机器人,祝大家都能中奖!
  7. 网购消费者心理学研究
  8. 一个美团快速打包方案
  9. mysql 新增拼接_mysql insert into新增group_concat查询出来拼接的数据
  10. Ubuntu——搜狗输入法