Objective-C使用变量和常量 – Objective-C开发教程

上一章Objective-C开发教程请查看:Objective-C基本语法和数据类型
这一章我们介绍OC中的变量和常量及其使用,其中变量要注意的是声明和定义,常量部分要注意的是使用#define和const,由于OC是C的超集,所以还是有一些C语言的概念,例如声明和定义,函数也有声明和定义,这个后面会讨论到。
Objective-C变量变量就是用来指定储存区域的,变量有数据类型限制,用来指定数据在内存中的大小、范围、结构等,其中数据范围决定可以在内存中存储的数据的大小,另外还包括与变量相关的一些列操作,例如对于基本数据类型就有四则运算。也就是说任何一个数据类型都必定包含对应的操作,这就是数据结构和算法了。
对于变量的命名推荐使用驼峰的格式,例如userName,myPassword等。
在上一章中我们讨论了OC中所有种类的数据类型,包括:基本数据类型、枚举类型、指针类型、数组、结构体、联合体等等,这里我们主要是讨论基本树类型的变量,其它数据类型也是类似的。
谨记:变量定义是分配内存空间的,也就是变量已经实际拥有一个对应的内存空间了,不管有没有初始化(静态类型初始化为NULL,其它未定义)。
Objective-C定义变量
变量定义的意思是告诉编译器如何创建和储存这个变量,使用语法如下:

type variables;

type是数据类型,variables是一个或多个变量标识符,这个语句同时声明和定义变量,下面是一个例子:
int i, j, k; char ch; NSString *str; double point;

变量的初始化可以在声明语句中进行,语法如下:
type name = value;

下面是一些例子:
extern int a = 3, b = 9; float number = 90.99; byte b = 5; char y = 'y';

对于没有初始化的定义,会使用NULL隐式初始化具有静态储存期的变量,其它类型的变量都是未定义的。
Objective-C变量声明
变量声明是告诉编译器存在某一个变量:数据类型和标识符,用于编译器编译阶段,但是在链接阶段会去找具体实现(如果没有实现,OC只有运行时才会报错,C语言在build的时候就报错了)。
变量声明顾名思义也就是说:编译器,这里有一个变量,记得不要报错哈!
和C语言类型,使用extern声明变量(或函数),告诉编译器是有这个变量的。一个常见的用法是:当多个文件共享一个变量的时候,可以使用extern声明变量。
但是谨记:变量声明不分配内存空间,只是告诉编译器有这个变量,叫编译器自己去找,找不到再报错。也就是说,变量定义只有一个(重复定义会报错)。
另外,如果当初是使用其它文件的变量,不需要导入变量所在的头文件。
下面是一个简单的例子,在同一个文件内:
// 变量声明 extern int a, b, c; extern float p; int main () { /* 变量定义 */ int a, b; int c; float f; /* 初始化 */ a = 10; b = 20; c = a + b; NSLog(@"c : %d", c); p = 3.14; NSLog(@"p : %f", f); return 0; }

同样的概念也适用于函数声明,同时,OC支持C语言风格的函数,对应的声明一般是放在你需要使用的地方,而实现可以放在任何文件中,下面是函数声明和定义的例子:
// 函数声明 int func(); int main() { // 函数调用 int i = func(); }// 函数定义 int func() { return 0; }

Objective-C中的左值和右值
OC中有两种表达式:
  • 一种是左值表达式,它表示内存位置,右边的值赋给左边;
  • 另一种是右值表达式,它表达式内存中的数据,所以不能用来赋值。
Objective-C常量常量指的是固定的值,这些固定的值也称为字面量,例如2、3、’ X’ 、” string” 等,常量的类型包括所有基本数据类型,包括枚举类型常量。
但是常量和普通变量是一样的,只不过不能更改它们的值。
整型常量
一个整型常量可以是十进制数,八进制数或者是十六进制数,十六进制数使用0x或0X作为前缀,八进制数的前缀为0。
整型常量也可以有一个后缀:U和L,U表示unsigned,L表示long,后缀可以使用小写或者大写,但是一般都是使用大写。
下面是一些整型常量的例子:
11 215L // long 12u // unsigned 0xff0a // 十六进制 078 // 八进制

浮点常量
一个浮点常量包括整数部分、小数部分和指数部分,我们可以使用小数表示浮点数,或者使用指数表示,下面是一些例子:
3.1415926 31415926E-7L 112E 9. 109.e10

字符常量
字符常量使用单引号括起来,例如’ x’ 和’ y’ ,它们的类型是char类型,储存的是单个字符。
其中一个字符常量可以是一般的字符,或者一个转义字符,如’ \n’ ,或者一些编码字符如’ \u2145′ .
转义字符有特殊的含义,一个转义字符一般不是其字面量的意思,例如’ \n’ 表示换行,下面是一些常用的转义字符:
转移字符解释
\\表示一个 \
\’ 表示单引号 ‘
\” 表示双引号 “
\?表示问号 ?
\a表示一个警报或铃声
\b退格
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\ooo一到三位数的八进制数
\xhh . . . 一个或多个数字的十六进制数
下面是使用转义字符的例子:
#import < Foundation/Foundation.h>int main() { NSLog(@"Hello\tWorld\n\n"); return 0; }

字符串常量
字符串常量使用双引号括起来,例如:” string” ,一个字符串包含一个或多个字符。
在OC中使用字符串需要使用NSString类型进行定义,下面是一些例子:
"STRING" "OC" "iOS" "macOS"

C风格定义常量
C风格定义常量的方式有两种:
  • 使用#define宏定义,注意#define宏定义仅仅是字符串替换(可以说其标识符并不是一个变量,会在预编译的时候在代码中进行替换)。
  • 使用const关键字,如const int a = 8; 原则上a就不能再更改了,并且a是一个变量。
1、使用#define宏定义定义常量
使用语法如下:
#define name value

下面是一个使用例子:
#import < Foundation/Foundation.h>#define LENGTH 10 #define WIDTH5 #define NEWLINE '\n'int main() { int area; area = LENGTH * WIDTH; NSLog(@"value of area : %d", area); NSLog(@"%c", NEWLINE); return 0; }

2、使用const关键字定义常量
使用语法如下:
const type name = value;

【Objective-C使用变量和常量 – Objective-C开发教程】下面是一个使用例子:
#import < Foundation/Foundation.h>int main() { const intLENGTH = 10; const intWIDTH= 5; const char NEWLINE = '\n'; int area; area = LENGTH * WIDTH; NSLog(@"value of area : %d", area); NSLog(@"%c", NEWLINE); return 0; }

    推荐阅读