指针和引用区别

指针和引用区别?

引用只是别名,不占用具体存储空间,只有声明没有定义;指针是具体变量,需要占用存储空间。

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

宏定义和函数有何区别?

  • 宏在编译时完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数。

  • 宏函数属于在结构中插入代码,没有返回值;函数调用具有返回值。

  • 宏函数参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。

  • 宏函数不要在最后加分号。

宏定义和const区别?

  • 宏替换发生在编译阶段之前,属于文本插入替换;const作用发生于编译过程中。

  • 宏不检查类型;const会检查数据类型。

  • 宏定义的数据没有分配内存空间,只是插入替换掉;const定义的变量只是值不能改变,但要分配内存空间。

宏定义和typedef区别?

  • 宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名。

  • 宏替换发生在编译阶段之前,属于文本插入替换;typedef是编译的一部分。

  • 宏不检查类型;typedef会检查数据类型。

  • 宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束。

  • 注意对指针的操作,typedef char * p_char和#define p_char char *区别巨大。

宏定义和内联函数(inline)区别?

  • 在使用时,宏只做简单字符串替换(编译前)。而内联函数可以进行参数类型检查(编译时),且具有返回值。

  • 内联函数本身是函数,强调函数特性,具有重载等功能。

  • 内联函数可以作为某个类的成员函数,这样可以使用类的保护成员和私有成员。而当一个表达式涉及到类保护成员或私有成员时,宏就不能实现了。

条件编译#ifdef, #else, #endif作用?

  • 可以通过加#define,并通过#ifdef来判断,将某些具体模块包括进要编译的内容。

  • 用于子程序前加#define DEBUG用于程序调试。

  • 应对硬件的设置(机器类型等)。

  • 条件编译功能if也可实现,但条件编译可以减少被编译语句,从而减少目标程序大小。

区别以下几种变量?

const int a;
int const a;
const int *a;
int *const a;
  • int const a和const int a均表示定义常量类型a。

  • const int *a,其中a为指向int型变量的指针,const在 * 左侧,表示a指向不可变常量。(看成const (*a),对引用加const)

  • int *const a,依旧是指针类型,表示a为指向整型数据的常指针。(看成const(a),对指针const)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值