iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

iOS 菜鳥工程師的30天 objective-C系列 第 2

Day 02 - Variables 與 Constants

Variables(變量)

在 Objective-C 中的變量定義(Definition)

定義 一個變量 意味著告訴編譯器變量存在哪裏以及佔了多少儲存空間
變量指定一種數據類型,可以包含一個或多個該類型的變量。

type variable_list;

ex.

int i, j, k;
char c, ch;
float f, salary;
double d;

變量可以在聲明(declaration)時初始化

type variable_name = value;

ex.

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

對於沒有初始化的定義,具有靜態儲存持續時間(static storage duration)的變量為 NULL,而其他變量的初始值則為未定義(undefined)

在 Objective-C 中的變量聲明(Declaration)

變量聲明:向編譯器保證存在有一個具有一定類型及名稱的變量,以便編譯器進一步編譯,而無需提供該變量的完整訊息。
變量聲明 只有在編譯時才有意義,編譯器在程序鏈接時才需要實際的聲明。
在使用多個文件時而只在其中一個文件定義變數時,變量聲明很有用。可以在任何地方使用extern聲明變量。
雖然可以聲明一個變量多次,但它只會被定義一次。

#import <Foundation/Foundation.h>

// 聲明變量
extern int a, b;
extern int c;
extern float f;

int main () {
  // 定義變量
  int a, b;
  int c;
  float f;
 
  // 初始化
  a = 10;
  b = 20;
  
  c = a + b;
  NSLog(@"value of c : %d \n", c);

  f = 70.0/3.0;
  NSLog(@"value of f : %f \n", f);
 
  return 0;
}

相同的概念可以用在 function 聲明,在聲明時提供名稱,實際定義可以在任何地方拿到。

// 聲明function
int func(void);

int main() {
   // function call
   int i = func();
}

// 定義function
int func() {
   return 0;
}

Constants(常量)

常量是指為固定值,在執行過程中不會改變。這固定的值也被稱為文字(literals)。
常量可以是任何基本的類型,ex. integer, floating, character, string literal,enumeration

整數文字

整數文字可以是十進,八進或十六進位的常量。
前綴指定基本或基數:0x或0X為十六進位,八進位為0。
整數文字也可以有”一個“後綴,即U和L的組合。後綴可以是大寫或小寫,並且可以在任何順序。

212         /* Legal */
215u        /* Legal */
0xFeeL      /* Legal */
078         /* Illegal: 八進位沒有8 */
032UU       /* Illegal: 不能重複後綴 */

以下為其他類型的整數文字例子:

85         /* decimal(十進位) */
0213       /* octal(八進位) */
0x4b       /* hexadecimal(十六進位) */
30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */

字符常量(Character Constants)

字符在單引號中,ex. 'X' ,可以儲存在簡單的 char 類型。

字符可以是:

  1. 普通的字符(ex.'x')
  2. 轉義序列(escape sequence)(ex. '\t'):有特殊意義
  3. 通用字符(ex.'\u02C0')

轉義序列:

轉義序列 (前面都要再加個斜線) 意思
\ 文字
' '文字
" "文字
? ?文字
a 警告or鐘
b Backspace
f 換頁
n 換行
r return
t 水平tab
v 垂直tab
ooo ㄧ到三位數的八進位
xhh 一到多位的十六進位數

字串文字(String Literals)

文字在雙引號中,字串可以包含字符、轉義序列、通用字符。

定義常量

在 C 有兩種簡單的方法:

  1. 使用#define預處理.
  2. 使用const關鍵字.

#define 預處理

使用#define預處理定義一個常數

#define identifier value

ex.

#import <Foundation/Foundation.h>

#define HEIGHT 30
#define WIDTH 5

int main() {
    
    int area;
    
    area = HEIGHT * WIDTH;
    
    NSLog(@"面積: %d",area);
    
    return 0;
}
2021-09-09 01:26:38.271407+0800 TestOC[65072:1959114] 面積: 150

const 關鍵字

const修飾符可以保護變量不被修改。
可以使用const來聲明常量的前綴與特定類型如下:

const type variable = value;

ex.

#import <Foundation/Foundation.h>

int main() {
    
    const int HEIGHT = 30;
    const int WIDTH = 5;
    
    int area;
    
    area = HEIGHT * WIDTH;
    
    NSLog(@"面積: %d",area);
    
    return 0;
}
2021-09-09 01:30:34.893086+0800 TestOC[65168:1964891] 面積: 150

上一篇
Day 01 - objective C 基礎語法
下一篇
Day 03 - 關於 const, static, extern 的三兩事
系列文
iOS 菜鳥工程師的30天 objective-C10

尚未有邦友留言

立即登入留言