[c++]通过一个简单的程序引出#define与typedef的区别

废话不多说,请看下面程序:

#include<iostream>
using namespace std;

#define SIGN1 char*  //
typedef char * SIGN2;//typedef是一条语句所以以分号结尾

int main()
{
	SIGN1 ch1,ch2;
	SIGN2 ch3,ch4;

	cout<<sizeof(ch1)<<" "<<sizeof(ch2)<<endl;
	cout<<sizeof(ch3)<<" "<<sizeof(ch4)<<endl;

	return 0;
}

想一想答案是什么???

#define宏替换只是简单的替换:(预处理时完成的)(以#开头的都是预处理命令,结尾没有分号,因为它们不是语句)

SIGN1 ch1,ch2; ----------->>>> char * ch1,ch2;

ch1是一个指针(char *)四个字节    ch2类型为 char一个字节

typedef 类型重命名,被命名的标示符具有类型定义说明的功能(编译时处理)(是一条语句,所以以分号结尾)

SIGN2  ch3,ch4; ----------->>>> char  * ch3,*ch4;

ch3和ch4都是指针

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 05:38:10

[c++]通过一个简单的程序引出#define与typedef的区别的相关文章

DuiLib学习笔记2——写一个简单的程序

我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷.我的新建项目名为:duilibTest 在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门 首先新建一个win32项目 去DuiLib根目录,把目录下DuiLib文件夹拷贝到新建项目的根目录.再把这个项目添加进我们解决方案中. 从教程里面把以下代码粘贴到我们项目的stdafx.h中 // Duilib使用设置部分 #pragma once #define WIN32_LEAN_AND_MEAN

一个简单木马程序的实现

实现一个简单的木马,一般需要客户端和服务端,为了便于实现,就用Windows自带的Telnet软件远程连接,服务端通过监听某个端口提供服务,类似于Telnet服务的后台程序.其服务端编程的基本原理如下: 1)打开一通信通道(绑定某个端口)并告知本地主机,它在某一个地址上接收客户请求.利用Socket和bind函数实现. 2)等待客户请求到达该端口.利用listen函数实现. 3)接收到重复服务请求,处理该请求并发送应答信号.利用accept函数实现. 4)返回第二步,接收另一客户请求. 5)关闭

JavaSE - 一个简单的程序对新手的启发

一个简单的程序: 题目:现在完成一个简单的程序,可以输出两个数字的乘方. public class TestJava{ public static void main(String args[]){ int num = 10 ; // 定义整型变量 num = 30 ; // 修改变量的内容 System.out.println("num的内容是:" + num) ; System.out.println("num * num = " + num * num) ;

#define 和typedef的区别

typedef和define的详细区别 2011-04-19 15:11 firnow firnow 字号:T | T 对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的.本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考. AD:51CTO学院:IT精品课程在线看! typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起

关于Hibernate的一个简单小程序

本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语句 第一步:创建一个java项目,没有必要创建一个web项目,因为Hibernate本身是针对后台对数据库的操作的 第二步:导入jar包:可以在根目录下创建一个lib文件夹用来存放导入的jar包,当然要先下载Hibernate的资源包并解压,打开之后首先将根目录的两个jar包导入,截图如下 然后打开

用一个简单小程序谈import和from...import的区别

今天在自己写代码的过程中,设计到随机种子数量(参数),因为一个文件中可能用到这个参数不止一次甚至是不止一个文件会用到这个参数.对于训练一个数据集来说,如果当你的性能跑的差不多的话,肯定会改这个参数,那如果你在函数中给这个参数直接赋了值,后期改的时候牵动会很大,所以这个时候就要想着在另一个文件中单独定义这个参数,在其他文件中来调用.这个时候就涉及到了在一个文件中导入另一个文件中包含的某些功能比如类和函数. 自己特意写了简单的程序帮理解:先说明我是在test1文件中定义两个函数sum1()和sum2

一个简单C程序的汇编代码分析

几个重要的寄存器 eip - 用于存放当前所执行的指令地址 esp - 栈(顶)指针寄存器 ebp - 基址(栈底)指针寄存器 简单的C程序 1 int g(int x) 2 { 3 return x + 10; 4 } 5 6 int f(int x) 7 { 8 return g(x); 9 } 10 11 int main(void) 12 { 13 return f(7) + 5; 14 } 汇编代码分析 1 g: 2 pushl %ebp 3 movl %esp, %ebp 4 :下面

c:how to program2.3另一个简单的程序:两个整数相加

我们下一个程序是用标注库中的scanf函数去获得用户输入的两个整型数,计算出他们的和并用printf打印出来,这个程序和输出在下面 //fig2.5// Addition program. #include <stdio.h> //function main begins program execution int main( void ) { int integer1; // first number to be entered by user int integer2; // second

初学者:简单的租车程序(敲了一晚)(想大神看看,为啥我一个简单的程序要敲这么多,可以怎么改进?)

/** * 创建一个接口实现租凭方法 * */package com.lxl.car; public interface Rent { void rent(int day,int num);} /** * 定义一个抽象的汽车类 属性:颜色,型号 ,租车的价格 * */package com.lxl.car; public abstract class Car implements Rent{ //构造方法 public Car(){} private String size;// 型号 priv