Objective-C 变量

变量只不过是程序可以操作的存储区域的名称。Objective-C 中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可存储在该存储器中的值的范围;以及可以应用于变量的操作集。

变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。由于Objective-C区分大小写,因此大小写字母是不同的。基于前一章中解释的基本类型,将有以下基本变量类型 :

编号类型 & 描述
1

char

通常是一个八位字节(一个字节)这是整数类型。

2

int

机器整数的最自然大小。

3

float

单精度浮点值。

4

double

双精度浮点值。

5

void

表示缺少类型。

Objective-C 编程语言还允许定义各种其他类型的变量,我们将在后面的章节中介绍这些变量,如枚举、指针、数组、结构、并集等。在本章中,我们只研究基本的变量类型。


Objective-C 中的变量定义

变量定义意味着告诉编译器在哪里以及在多大程度上为变量创建存储。变量定义指定数据类型,并包含该类型的一个或多个变量的列表,如下所示:

  1. type variable_list;

这里,类型 必须是有效的 Objective-C 数据类型,包括 char、w_char、int、float、double、bool 或任何用户定义的对象等,variable_list 可以由一个或多个由逗号分隔的标识符名称组成。比如下面这些有效声明:

  1. int i, j, k;
  2. char c, ch;
  3. float f, salary;
  4. double d;

int i, j, k; 这一行声明和定义变量 i、j 和 k;它指示编译器创建 int 类型的名为 i、j 和 k 的变量。

变量可以在其声明中初始化(分配初始值)。初始值设定项由等号和常量表达式组成,如下所示:

  1. type variable_name = value;

例如:

  1. extern int d = 3, f = 5; // declaration of d and f.
  2. int d = 3, f = 5; // definition and initializing d and f.
  3. byte z = 22; // definition and initializes z.
  4. char x = 'x'; // the variable x has the value 'x'.

对于没有初始值设定项的定义:具有静态存储持续时间的变量隐式初始化为 NULL(所有字节的值均为 0);所有其他变量的初始值未定义。


Objective-C 中的变量声明

变量声明向编译器提供了一个保证,即存在一个具有给定类型和名称的变量,以便编译器继续进行进一步编译,而不需要关于该变量的完整详细信息。变量声明仅在编译时有其意义,编译器在链接程序时需要实际的变量声明。

当您使用多个文件并且在其中一个文件中定义变量时,变量声明非常有用,该文件将在程序链接时可用。您将使用 extern 关键字在任何位置声明变量。虽然可以在 Objective-C 程序中多次声明变量,但在文件、函数或代码块中只能定义一次。


实例

尝试以下实例,其中变量已在顶部声明,但它们已在主函数内定义和初始化:

  1. #import <Foundation/Foundation.h>
  2. // Variable declaration:
  3. extern int a, b;
  4. extern int c;
  5. extern float f;
  6. int main () {
  7. /* variable definition: */
  8. int a, b;
  9. int c;
  10. float f;
  11. /* actual initialization */
  12. a = 10;
  13. b = 20;
  14. c = a + b;
  15. NSLog(@"value of c : %d \n", c);
  16. f = 70.0/3.0;
  17. NSLog(@"value of f : %f \n", f);
  18. return 0;
  19. }

结果如下:

  1. 2022-07-07 22:43:31.695 demo[14019] value of c : 30
  2. 2022-07-07 22:43:31.695 demo[14019] value of f : 23.333334

同样的概念也适用于函数声明,在声明时提供函数名,并且可以在其他任何地方给出其实际定义。在下面的示例中,将使用 C 函数进行解释,正如您所知,Objective-C 也支持 C 风格的函数:

  1. // function declaration
  2. int func();
  3. int main() {
  4. // function call
  5. int i = func();
  6. }
  7. // function definition
  8. int func() {
  9. return 0;
  10. }

Objective-C中的左值(lvalue)和右值(rvalue)

Objective-C 中有两种表达式:

  • lvalue :引用内存位置的表达式称为 "lvalue" 左值表达式。左值可以显示为赋值的左侧或右侧。
  • rvalue :术语 rvalue 是指存储在内存中某个地址的数据值。右值是一个不能赋值的表达式,这意味着右值可能出现在赋值的右侧,而不是左侧。

变量是左值,因此可能出现在赋值的左侧。数字文字是右值,因此可能无法赋值,也无法显示在左侧。以下是有效声明:

  1. int g = 20;

但下面的语句无效,将生成编译时错误:

  1. 10 = 20;