在Objective-C编程语言中,数据类型是指用于声明不同类型的变量或函数的扩展系统。 变量的类型决定了它在存储中占用的空间大小以及如何解释存储的位模式。
Objective-C中的类型可分为以下几类 -
编号 | 类型 | 描述 |
---|---|---|
1 | 基本类型 | 它们是算术类型,由两种类型组成:(a)整数类型和(b)浮点类型。 |
2 | 枚举类型 | 它们又是算术类型,用于定义只能在整个程序中分配某些离散整数值的变量。 |
3 | void类型 | 类型说明符void 表示没有可用的值。 |
4 | 派生类型 | 它们包括(a)指针类型,(b)数组类型,(c)结构类型,(d)联合类型和(e)函数类型。 |
数组类型和结构类型统称为聚合类型。 函数的类型指定函数返回值的类型。 我们将在下一节中看到基本类型,而其他类型将在后续章节中介绍。
1. 整数类型
下表提供了有关标准整数类型的存储大小和值范围的详细信息 -
类型 | 存储大小 | 值范围 |
---|---|---|
char |
1字节 | -128 ~ 127 或 0 ~ 255 |
unsigned char |
1字节 | 0 ~ 255 |
signed char |
1字节 | -128 ~ 127 |
int |
2或4字节 | -32,768 ~ 32,767 或 -2,147,483,648 ~ 2,147,483,647 |
unsigned int |
2或4字节 | 0 ~ 65,535 或 0 ~ 4,294,967,295 |
short |
2字节 | -32,768 ~ 32,767 |
unsigned short |
2字节 | 0 ~ 65,535 |
long |
4字节 | -2,147,483,648 ~ 2,147,483,647 |
unsigned long |
4字节 | 0 ~ 4,294,967,295 |
要在特定平台上获取类型或变量的确切大小,可以使用sizeof
运算符。 表达式sizeof(type)
产生对象或类型的存储大小(以字节为单位)。 以下是在任何机器上获取int
类型大小的示例代码 -
1 #import <Foundation/Foundation.h> 2 3 int main() { 4 NSLog(@"Storage size for int : %d ", sizeof(int)); 5 return 0; 6 }
编译并执行上述程序时,它在Linux上生成以下结果 -
2018-11-14 01:03:20.930 main[118460] Storage size for int : 4
2. 浮点类型
下表提供了有关标准浮点类型的存储大小和值范围及其精度的详细信息 -
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float |
4字节 | 1.2E-38 ~ 3.4E+38 |
6位小数 |
double |
8字节 | 2.3E-308 ~ 1.7E+308 |
15位小数 |
long double |
10字节 | 3.4E-4932 ~ 1.1E+4932 |
19位小数 |
头文件float.h
定义了一些宏,可使用这些值以及有关程序中实数的二进制表示的其他详细信息。 以下示例将打印浮点类型占用的存储空间及其范围值 -
1 #import <Foundation/Foundation.h> 2 3 int main() { 4 NSLog(@"Storage size for float : %d , maxval=%f ", sizeof(float), FLT_MAX); 5 return 0; 6 }
执行上面示例代码,得到以下结果:
2018-11-14 01:10:18.270 main[44023] Storage size for float : 4 , maxval=340282346638528859811704183484
注:有关 float.h 中定义的一些宏如下所示 -
1 #define FLT_DIG 6 /* # of decimal digits of precision */ 2 #define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */ 3 #define FLT_GUARD 0 4 #define FLT_MANT_DIG 24 /* # of bits in mantissa */ 5 #define FLT_MAX 3.402823466e+38F /* max value */ 6 #define FLT_MAX_10_EXP 38 /* max decimal exponent */ 7 #define FLT_MAX_EXP 128 /* max binary exponent */ 8 #define FLT_MIN 1.175494351e-38F /* min positive value */ 9 #define FLT_MIN_10_EXP (-37) /* min decimal exponent */ 10 #define FLT_MIN_EXP (-125) /* min binary exponent */ 11 #define FLT_NORMALIZE 0 12 #define FLT_RADIX 2 /* exponent radix */ 13 #define FLT_ROUNDS 1 /* addition rounding: near */
3. void类型
void
类型指定没有可用的值。它用于以下两种情况 -
编号 | 类型 | 描述 |
---|---|---|
1 | 函数指定返回void |
Objective-C中有各种函数,它们不需要返回值,或者也可以说它们返回void 。 没有返回值的函数的返回类型为void 。 例如,void exit(int status); |
2 | 函数参数为void |
Objective-C中有各种函数不接受任何参数。没有参数的函数可以指示接受void 类型。 例如,int rand(void); |
如果此时还无法理解void
类型也没有关系,可在后面的章节中看到更多介绍这个概念和示例。