Object-C学习(五):结构体(struct)、typedef、以及与#define宏定义的区别
2013-08-20 17:02
429 查看
结构体:
结构体是一种数据类型的组合和数据抽象。
基本格式如下:
struct complex_struct{
double x, y;
};
这样就定义了一个由两个double类型组成的结构体,complex_struct是标示符,这种标示符成为Tag,我们可以把它的整体看做一个类型名,如果你想声明一个这种类型的变量可以像声明其他数据类型的变量一样,如下:
struct complex_struct{
double x, y;
}z1, z2;
像这样声明了z1,z2两个变量,如果想要给他们赋值可以直接z1.x = 10; z1.y = 20;
结构体{}内可以定义多个变量,他们之间用“,”号隔开。
结构体变量也可以在初始化的时候直接定义:struct complex_struct z1 = { 10,20 };
{}语法不能用于结构体的赋值,下面是一种错误的用法:
struct complex_struct z1;
z1 = { 10, 20 };
typedef关键字:
typedef是C语言的关键字,作用是为一种数据类型定义一个新的名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
使用它有两个目的,一个是给变量一个容易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
下面就简化一下上面定义的结构体:
struct complex_struct{
double x, y;
}
就等价与mystruct。
想更加深入的了解struct 请去这里
#define宏定义预处理指令
#define是一种预处理指令,比如你可以通过这样 #define PI 3.1415926 预定义一个π,在你的程序里可以当用到π值的时候直接使用PI代替3.1415926。它只是一个简单的替换,并且除了可以替换一个常量以外,也可以替换一些条件判断、函数等。如:#define Loop_10 for (int i=0; i<10; i++)。而且可以用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
而typedef不是简单的文本替换,看下面这个从百度百科拿来的例子,很好的对它们做了比较:
typedef char* pStr1;
#define pStr2 char *pStr1 s1, s2;pStr2 s3, s4;在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。上例中define语句必须写成 pStr2 s3, *s4; 这这样才能正常执行。
结构体是一种数据类型的组合和数据抽象。
基本格式如下:
struct complex_struct{
double x, y;
};
这样就定义了一个由两个double类型组成的结构体,complex_struct是标示符,这种标示符成为Tag,我们可以把它的整体看做一个类型名,如果你想声明一个这种类型的变量可以像声明其他数据类型的变量一样,如下:
struct complex_struct{
double x, y;
}z1, z2;
像这样声明了z1,z2两个变量,如果想要给他们赋值可以直接z1.x = 10; z1.y = 20;
结构体{}内可以定义多个变量,他们之间用“,”号隔开。
结构体变量也可以在初始化的时候直接定义:struct complex_struct z1 = { 10,20 };
{}语法不能用于结构体的赋值,下面是一种错误的用法:
struct complex_struct z1;
z1 = { 10, 20 };
typedef关键字:
typedef是C语言的关键字,作用是为一种数据类型定义一个新的名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
使用它有两个目的,一个是给变量一个容易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
下面就简化一下上面定义的结构体:
typedef struct complex_struct { double x,y; }myStruct; myStruct a = {10.0,20.0}; NSLog(@"%f",a.x);这样在我们想定义一个struct类型的变量时,就不用struct complex_struct z1 = { 10,20 }这么麻烦的写了。
struct complex_struct{
double x, y;
}
就等价与mystruct。
想更加深入的了解struct 请去这里
#define宏定义预处理指令
#define是一种预处理指令,比如你可以通过这样 #define PI 3.1415926 预定义一个π,在你的程序里可以当用到π值的时候直接使用PI代替3.1415926。它只是一个简单的替换,并且除了可以替换一个常量以外,也可以替换一些条件判断、函数等。如:#define Loop_10 for (int i=0; i<10; i++)。而且可以用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
而typedef不是简单的文本替换,看下面这个从百度百科拿来的例子,很好的对它们做了比较:
typedef char* pStr1;
#define pStr2 char *pStr1 s1, s2;pStr2 s3, s4;在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。上例中define语句必须写成 pStr2 s3, *s4; 这这样才能正常执行。
相关文章推荐
- 结构体:struct 和 typedef struct应该以及结构体的构造函数 区别
- typedef struct和struct定义结构体的区别
- 在C语言中 #define dPS struct s * 与 typedef struct s * tPS; 的 这两种声明的区别
- struct和typedef struct、enum与typedef enum、链表与结构体的区别(转载)
- typedef和#define的用法以及区别
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- #define用法以及#define和typedef区别
- #define用法以及#define和typedef区别
- typedef定义的struct类型与struct定义的结构体变量在使用上的区别
- #define用法以及#define和typedef区别
- #define用法以及#define和typedef区别
- 结构体定义struct和typedef struct的区别
- 结构体定义 typedef struct 学习
- 黑马程序员——C语言日志——typedef的使用以及和#define的区别
- 宏定义 #define与typedef的区别。
- 宏定义#define和typedef的区别和典型范例题目辨析
- #define用法以及#define和typedef区别
- 【Xcode学C-6】宏定义#define、条件编译#if、文件包含、内部外部函数以及typedef的用法
- C语言 枚举(enum)、宏定义(#define)、结构体(struct)的一种联合应用
- C语言学习11:typedef和define区别,头文件的使用以及 <>和“”区别,宏定义中#和##的用法,条件编译,gcc和c99中宏定义使用printf和sprintf,条件编译避免头文件包含