个性化阅读
专注于IT技术分析

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 WIDTH  5
#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;

下面是一个使用例子:

#import <Foundation/Foundation.h>

int main() {
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   NSLog(@"value of area : %d", area);
   NSLog(@"%c", NEWLINE);

   return 0;
}
赞(0)
未经允许不得转载:srcmini » Objective-C使用变量和常量 – Objective-C开发教程

评论 抢沙发

评论前必须登录!