【C++】typedfe和宏定义的区别

news/2024/7/5 11:55:43

先来说结论:

        1.宏定义作用于编译之前(也就是预编译阶段,而typedef作用于编译阶段

        2.typedef仅限于类型的重定义,而宏定义不仅可以为类型起别名还可以为数值定义起别名(简单的替换)

下面来看一下区别

下面这是typedef的用法

typedef int* PINT;int main()
{int a = 10, b = 20;const PINT p = &a;*p = 100;p = &b;
}

我们会看到p = &b这行代码会报错:“表达式必须是可修改的左值”,为什么会这样呢,原因是PINT等价于int* 但是使用typedef的话,int*在编译阶段是个整体,也就是说const修饰的是int*这个整体,而我们知道int*这个整体是个指针类型,也就是指针显常性,就是我们的p显示为常性(因为我们的p是个指针,const修饰的是指针),无法修饰到指向为常性,所以我们可以修改到它的指向,而*p指向不为常性,本身我们*p = 10,所以我们可以对*p进行修改

const PINT p = &a;

所以显示为常性的是p

 下面来看宏定义:

#define SINT int*int main()
{int a = 10, b = 20;const SINT p = &a;*p = 100;p = &b;
}

我们会看到*p = 100;这句代码会报错:“表达式必须是可修改的左值”,原因是我们在的宏定义在预编译阶段就已经被替换掉了,也就是一直都是const int * p = &a;const修饰的一直都是*这个指向,所以我们的指向不可改变,因此我们的*p = 100会报错,而我们的指针本身p在上述代码中不具备常性,所以p = &b代码可以通过

 

关于typedef和宏定义的区别我的理解如上文章所示,有错误的地方还请大家指出,共同学习,共同进步!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

在当前很多的GPS平台当中,有很多是基于asp.NETsiverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的增多,平台已经臃肿不堪。 设计…

【C++】虚函数

虚函数是构成C多态的重要一步,今天来说一下虚函数! 虚函数: 在基类(或父类)中,使用virtual关键字对函数进行声明为并在一个或多个派生类(子类)中被重新定义的成员函数,通过指向派生类的基类指针或引用,访…

看了极光推送技术原理的几点思考

看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报目录(?)[] 移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机…

【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数

我们都知道面向对象编程的三大特征是封装、继承、多态,今天我们就来说一下其中之一的多态。 概念: 多态: 多态字面意思就是多种形态,C 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。(取自…

【C++】多线程thread

进程和线程这部分呢我之前在我Linux中写过这些东西,和C中线程的概念差不多,大家可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度…

【C++】多线程互斥锁、条件变量

我们了解互斥量和条件变量之前,我们先来看一下为什么要有互斥量和条件变量这两个东西,了解为什么有这两东西之后,理解起来后面的东西就简单很多了!!! 先来看下面这段简单的代码: int g_num 0;…

【C++】二叉树的先序、中序、后序遍历序列

二叉树常用到的遍历有这三种 先序遍历:先遍历根节点,然后再分别遍历左节点和右节点。(根左右) 中序遍历:先遍历左节点,然后再遍历根节点,最后遍历右节点。(左根右) 后序遍历:先遍历左节点,然…

软件工程需求设计说明书

Java即时通聊天程序 设计需求说明书 专业班级: 计本班1202班 项目组成员: 杨宗坤 刘瑞 满亚洲 指导教师: 张利峰 开始日期: 完成日期: 编写目的: 本说明书是在充分理解系统需求分析…