typedef与#define的使用时注意点
来源:互联网 发布:部落冲突骷髅法术 数据 编辑:程序博客网 时间:2024/06/13 06:21
本篇文章根据自己对typedef以及#define的认识,通过提问加释义的方式,分享对这两个关键词的用法,了解其中未知内容同时在编程或者面试中避免不必要的错误。
作者: 飞哥;
1.例: typedef static int STINT; //是否 正确?
释义: 错误,typedef 本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
2.请用数组定义64字节的char数组?
释义: typedef char szName[64];
3.请用一句代码定义char 为CHAR以及其指针类型的PCHAR?
释义: typedef char CHAR,*PCHAR;
对于同一个表达式或字符串要定义为两个或两个以上的别名则需要用','分开;
同时,对于定义不同数据类型时,其类型符号,比如指针 '*' 要紧跟在别名前;
4.请问以下结构体定义是否正确,如果不正确请更正并写出结构体定义的其他方法;
typedef
struct
tagNode
{
char
* pItem;
pNode pNext;
}*pNode;
释义: 错误
实际上以上结构体定义要完成两步:
第一步是定义类型为tagNode的一个结构体:
struct
tagNode
{
char
* pItem;
pNode pNext;
};
而在构造结构体时,并不能找到pNode类型到底是什么,所以可以这么处理:
1)在定义前声明:
typedef struct tagNode *pNode; //将结构体tagNode定义为*pNode;
该操作类似上面,先声明tagNode为结构体,然后将其指针定义为pNode类型;
2)在结构体内部用已经定义的tagNode:
typedef
struct
tagNode
{
char
* pItem;
tagNode* pNext; //这里不能是pNode;
}*pNode;
即: 编译器支持用typedef给一个还未完全声明的类型起新名字;
5.#define PINT1int *;
typedef int *PINT2;
请问: PINT1 a1,b1;
与
PINT2 a2,b2;
是否相同,如果不同请说明原因?
释义: 不同;b1被定义为int,而a1,a2,b2则被定义为int*;
#define定义后,编译器将定义项只是进行简单的文本替换,即:
int* a,b;
二typedef则是实实在在的将PINT2定义为了一种数据类型;其编译器编译的时候还是按照
类型表示符号进行的 : PINT2 a2,b2;
6. 下面程序是否有错误,找出错误行并说明原因?
typedef
char
*pStr;
char
string[4]=
"abc"
;
const
char
*p1=string;
const
pStr p2=string;
p1++;
p2++;
释义: 错误行出现在p2++中;
再次提醒,typedef在编译器中并不是进行简单的文本替换;
如果pStr被定义为: #define pStr char*;
则编译器会将 : const pStr p2 = string;直接替换为: const char* p2 = string;
此时没有任何问题(常量指针嘛,指针本身是可以改变的);
而这里用的是typedef,还是5知识点说过的,编译器编译的时候就认为pStr是一个类型,就像一个long类型一样,
它就是一个数据类型,类似: const long p2;这样是不是您就明白了?
如此一来,p2就变成了常量了,是不可以改变的;
0 0
- typedef与#define的使用时注意点
- 1.7、enum、#define和typedef的注意点
- typedef的使用与define的区别
- C 基础 typedef与define 的使用
- #define的一些注意点
- typedef与#define的区别
- #typedef与#define的区别
- typedef与define的区别
- typedef与#define 的区别
- typedef与#define 的区别
- typedef与#define 的区别
- typedef与#define的区别
- #define与 typedef的区别
- typedef与define的区别
- typedef与define的思考 .
- typedef与define的区别
- #define 与 typedef 的区别
- typedef与#define的区别
- 暂留
- Java---10---多线程概述
- 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
- 【hdu 1300】pearl(需要深刻理解dp,同龟兔赛跑)
- java 中Long和Integer不得不知道的秘密
- typedef与#define的使用时注意点
- HTTP Verbs: 談 POST, PUT 和 PATCH 的應用
- Android学习之ListView显示下拉列表
- Linux 守护进程的原理与实现
- 使用 UITableView 创建表格应用演练(1)——一个简单的表格应用
- ffmpeg debug 方法
- ORACLE 备份恢复命令imp/exp
- 递归搜索字符数组中的最大字符递归搜索字符数组中的最大字符
- Java接口编程参数类型选择