談到c語言,不得不提指針,有多少英雄好漢栽在指真上。利用指計可以很方便的使用數組和字符串(C#中的String類型就是引用類型,也就是指針類型)。指針支持動態分配內存,可以讓程序更簡介,提高效率。
“要想精確打擊,就要人工引導”---軍旅劇中導彈兵經常會這樣說,指針類似於人工引導的座標。靈活,易用,同時也很複雜,引導錯誤就是毀滅性的打擊。舉個栗子:移動大廈一層有10個方間,編號依次是1-10.其中2號給A公司租用,5-8給公司租用。以每個房間的編號第一個爲公司的地址。如果我們要給A公司送快遞,那就是給地址爲2的公司送快遞。如果給B公司送快遞就是給地址爲5的公司送快遞;
同樣,在編程中系統爲了管理內存,給內存中的每一個字節都設一個編號。所有變量在內存中要戰勝一個或幾個連續的字節。其中第一個字節就是該變量的地址。若有INT 類型的A,編譯時系統會爲A分配兩個字節的存儲單元。假設這兩個字節的編號分別爲:001002那邊A的地址就是001;
類型* 變量名;---定義指針
&取地址運算符,後面會緊跟一個變量,用來讀取變量的保存地址;
*:取變量的運算符。用於讀取該指針變的值;
// // main.m // ZhiZhen // // Created by 程英暾 on 2017/3/21. // Copyright 2017年 程英暾. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { int a=10;//變量 int* b;//指針類型的b b=&a;//將A的地址給B,也可以說B代表A的地址 NSLog(@"打印指針B所指向的地址中的值:%d",*b);//打印指針中所指向a的值 *b=20;//給指針賦值,也就是通過B給變理量a賦值 NSLog(@"a的值已經改變,其值爲:%d",a);//a的值改變了 }//@autoreOVER return 0; }
--------------------result--------------------
2017-03-21 22:20:29.835850 ZhiZhen[8931:355806] 打印指針B所指向的地址中的值:10
2017-03-21 22:20:29.836091 ZhiZhen[8931:355806] a的值已經改變,其值爲:20