您現在的位置是:電腦技術吧?>? 故障問題 ??>??const extern,extern static??>??正文詳情

const extern,extern static

牢德宇2019-12-20 17:42:15 人圍觀
簡介extern說明本文主要介紹如何在開發中使用常量、靜態和外部關鍵字。如果你喜歡我的文章,你可以關注我的微博:你可以到曉瑤閣來了解我們的iOS培訓課程。稍后將更新更多內容。。。

前言  本篇主要介紹在開發中怎么使用const,static,extern3個關鍵字,如果喜歡我的文章,可以關注我微博:吖了個崢,也可以來小碼哥,了解下我們的iOS培訓課程。

后續還會更新更多內容。

  一、const與宏的區別(面試題):  const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏,推薦我們使用const常量。

  編譯時刻:宏是預編譯(編譯之前處理),const是編譯階段。

  編譯檢查:宏不做檢查,不會報編譯錯誤,只是替換,const會編譯檢查,會報編譯錯誤。

  宏的好處:宏能定義一些函數,方法。

const不能。

  宏的壞處:使用大量宏,容易造成編譯時間久,每次都需要重新替換。

  注意:很多Blog都說使用宏,會消耗很多內存,我這驗證并不會生成很多內存,宏定義的是常量,常量都放在常量區,只會生成一份內存。

  // 常見的常量:抽成宏  #define XMGAccount @account  #define XMGUserDefault [NSUserDefaults standardUserDefaults]  // 字符串常量  static NSString * const account = @account;  - (void)viewDidLoad {  [super viewDidLoad];  // 偏好設置存儲  // 使用宏  [XMGUserDefault setValue:@123 forKey:XMGAccount];  // 使用const常量  [[NSUserDefaults standardUserDefaults] setValue:@123 forKey:account];  }  二、const作用:限制類型  1.const僅僅用來修飾右邊的變量(基本數據變量p,指針變量*p)  2.被const修飾的變量是只讀的。

  const基本使用  - (void)viewDidLoad {  [super viewDidLoad];  // 定義變量  int a = 1;  // 允許修改值  a = 20;  // const兩種用法  // const:修飾基本變量p  // 這兩種寫法是一樣的,const只修飾右邊的基本變量b  const int b = 20; // b:只讀變量  int const b = 20; // b:只讀變量  // 不允許修改值  b = 1;  // const:修飾指針變量*p,帶*的變量,就是指針變量.  // 定義一個指向int類型的指針變量,指向a的地址  int *p = a;  int c = 10;  p = c;  // 允許修改p指向的地址,  // 允許修改p訪問內存空間的值  *p = 20;  // const修飾指針變量訪問的內存空間,修飾的是右邊*p1,  // 兩種方式一樣  const int *p1; // *p1:常量 p1:變量  int const *p1; // *p1:常量 p1:變量  // const修飾指針變量p1  int * const p1; // *p1:變量 p1:常量  // 第一個const修飾*p1 第二個const修飾 p1  // 兩種方式一樣  const int * const p1; // *p1:常量 p1:常量  int const * const p1; // *p1:常量 p1:常量  }  三、const開發中使用場景:  1.需求1:提供一個方法,這個方法的參數是地址,里面只能通過地址讀取值,不能通過地址修改值  2.需求2:提供一個方法,這個方法的參數是地址,里面不能修改參數的地址。

  @implementation ViewController  // const放*前面約束參數,表示*a只讀  // 只能修改地址a,不能通過a修改訪問的內存空間  - (void)test:(const int * )a  {  // *a = 20;  }  // const放*后面約束參數,表示a只讀  // 不能修改a的地址,只能修改a訪問的值  - (void)test1:(int * const)a  {  int b;  // 會報錯  a = b;  *a = 2;  }  - (void)viewDidLoad {  [super viewDidLoad];  // Do any additional setup after loading the view, typically from a nib.  int a = 10;  // 需求1:提供一個方法,這個方法的參數是地址,里面只能通過地址讀取值,不能通過地址修改值。

  // 這時候就需要使用const,約束方法的參數只讀.  [self test:a];  // 需求2:提供一個方法,這個方法的參數是地址,里面不能修改參數的地址。

  [self test1:a];  }  @end  四、static和extern簡單使用(要使用一個東西,先了解其作用)  static作用:  修飾局部變量:  1.延長局部變量的生命周期,程序結束才會銷毀。

  2.局部變量只會生成一份內存,只會初始化一次。

  3.改變局部變量的作用域。

  修飾全局變量  1.只能在本文件中訪問,修改全局變量的作用域,生命周期不會改  2.避免重復定義全局變量  extern作用:  只是用來獲取全局變量(包括全局靜態變量)的值,不能用于定義變量  extern工作原理:  先在當前文件查找有沒有全局變量,沒有找到,才會去其他文件查找。

  // 全局變量:只有一份內存,所有文件共享,與extern聯合使用。

  int a = 20;  // static修飾全局變量  static int age = 20;  - (void)test  {  // static修飾局部變量  static int age = 0;  age ;  NSLog(@%d,age);  }  - (void)viewDidLoad {  [super viewDidLoad];  // Do any additional setup after loading the view, typically from a nib.  [self test];  [self test];  extern int age;  NSLog(@%d,age);  }  I  五、static與const聯合使用  static與const作用:聲明一個只讀的靜態變量  開發使用場景:在一個文件中經常使用的字符串常量,可以使用static與const組合  // 開發中常用static修飾全局變量,只改變作用域  // 為什么要改變全局變量作用域,防止重復聲明全局變量。

  // 開發中聲明的全局變量,有些不希望外界改動,只允許讀取。

  // 比如一個基本數據類型不希望別人改動  // 聲明一個靜態的全局只讀常量  static const int a = 20;  // staic和const聯合的作用:聲明一個靜態的全局只讀常量  // iOS中staic和const常用使用場景,是用來代替宏,把一個經常使用的字符串常量,定義成靜態全局只讀變量.  // 開發中經常拿到key修改值,因此用const修飾key,表示key只讀,不允許修改。

  static NSString * const key = @name;  // 如果 const修飾 *key1,表示*key1只讀,key1還是能改變。

  static NSString const *key1 = @name;  六、extern與const聯合使用  開發中使用場景:在多個文件中經常使用的同一個字符串常量,可以使用extern與const組合。

  原因:  static與const組合:在每個文件都需要定義一份靜態全局變量。

  extern與const組合:只需要定義一份全局變量,多個文件共享。

  全局常量正規寫法:開發中便于管理所有的全局變量,通常搞一個GlobeConst文件,里面專門定義全局變量,統一管理,要不然項目文件多不好找。

  GlobeConst.h  /*******************************首頁****************************/  extern NSString * const nameKey = @name;  /*******************************首頁****************************/  GlobeConst.m  #import   /*******************************首頁****************************/  NSString * const nameKey = @name;  /*******************************首頁****************************/

版權聲明:本文由 牢德宇 整理編輯。

原標題:c extern,const struct

轉載注明出處:http://www.dn9ww09s.icu/fault/15599.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 怎樣獲取select的值,獲取select2選中的值

    怎樣獲取select的值,獲取select2選中的值 相關圖片jsp獲取select選中的值本文的示例描述了JavaScript獲取select值的方法。與您分享以供參考。具體分析如下:1。顯示的漢字編碼如下:document.getelementbyselect下拉框提交值...

  • sql刪除重復數據,如何刪除重復數據

    sql刪除重復數據,如何刪除重復數據 相關圖片oracle恢復刪除的表有很多方法可以刪除Internet上的重復數據,例如delete from prod,grid,Inc其中ROWID in(選擇b.row,Id2 from(選表格刪除重復項...

  • 眼鏡框制作,手機中框和邊框的區別

    眼鏡框制作,手機中框和邊框的區別 相關圖片門窗框的固定方法在從ios8升級到ios9的過程中,彈出提示框的方式發生了很大的變化。在xcode7和ios9.0的SDK中,已經明確表示不再推薦使用UIAlertView,只怎樣調眼鏡框...

  • asp連接oracle數據庫,pl/sql developer

    asp連接oracle數據庫,pl/sql developer 相關圖片Oracle10g本文主要介紹了使用ODP的asp.net防注入登錄驗證程序,即Oracle連接方式。您可以參考Internet上許多SQL連接模式的登錄驗證,但是如果沒有Oracas和casshiro比較...

  • 如何保持狀態,保持好狀態

    如何保持狀態,保持好狀態 相關圖片如何讓自己保持穩定的狀態net提供了session對象,它允許程序員識別、存儲和處理來自同一瀏覽器對象的多個請求的上下文信息,并將其發送到服務器上的特定網絡應用程序。會話對應于...

  • php for android,android運行php

    php for android,android運行php 相關圖片android php服務器下面是一個PHP如何判斷Android、IOS或WP是否會訪問網站的示例。這很實用,我希望能對你有所幫助。在PHP中,我們可以使用$_server['http_php開發安卓...

  • iOS發布流程,ios流程軟件

    iOS發布流程,ios流程軟件 相關圖片蘋果app開發流程我認為GIT進程在IOS開發中的優勢不需要詳細解釋。這和SVN的不一樣。過去,我經常通過拖拽文件的方式,讓很多人來配合開發。--! 我不想在這里討論一些基本的命iosapp上...

  • %c,8c

    %c,8c 相關圖片c-5最簡單的方法是導出頁面上的所有內容,并在加載時調用它。請注意,頁面上不能有其他控件,包括button void converttoexcel(){響應。Cleac哩...

  • 緩沖區溢出漏洞解決方案,文件上傳漏洞解決方案

    緩沖區溢出漏洞解決方案,文件上傳漏洞解決方案 相關圖片文件上傳漏洞原理在網站建設初期,很多網站都會將密碼放入數據庫,在登錄驗證時使用SQL=select*from user where user name='username'和p文件包含漏洞繞過技巧...

  • 要使文本框獲得焦點,讓文本框獲得焦點的方法

    要使文本框獲得焦點,讓文本框獲得焦點的方法 相關圖片vb使文本框獲得焦點本文的例子描述了JavaScript在獲取焦點后實現背景圖像在文本框中默認顯示的方法。與您分享以供參考。具體如下:HTML代碼:?123456789formnavb設置文本框為焦點...

熱評文章

  • 無法解決的問題下還有八種解決方案,下淋最快的解決方案

    無法解決的問題下還有八種解決方案,下淋最快的解決方案 相關圖片技術方案和解決方案目前,大多數使用MySQL的網站同時使用Memcache作為密鑰值緩存。盡管這種架構非常流行,并且有很多成功的案例,但它過于依賴Memcache,這實際上使Me問題解決方案格式...

  • excel人民幣大寫函數,人民幣大寫公式

    excel人民幣大寫函數,人民幣大寫公式 相關圖片excel數字轉人民幣大寫SQL server函數將人民幣數字轉換為大寫形式的創建函數[dbo]。[f﹣num﹣(@num numeric(14,5))返回帶加密的varchar(100電子表格人民幣大寫函數...

  • 本年累計余額怎么算,養老保險累計賬戶余額

    本年累計余額怎么算,養老保險累計賬戶余額 相關圖片銀行日記賬的本年累計怎么算財務人員手工記賬時,會有借貸后的余額,即累計余額,即每個科目后記錄余額。如果使用計算機記賬,可以查詢完成累計余額的計算。首先,創建一個表...

  • 如何設置服務器ip地址,服務器ip地址大全

    如何設置服務器ip地址,服務器ip地址大全 相關圖片查詢app服務器ip地址本文給出了一個用PHP獲取服務器IP地址的實例。與您分享以供參考。具體分析如下:在PHP中,我們通常使用$_server['http_host']在URL中獲取時間同步服務器ip地址...

  • ADO.NET,NET是什么

    ADO.NET,NET是什么 相關圖片futurenet在使用ASP時,我們經常使用第三方控件來實現一些圖像功能。現在,隨著asp.net的引入,我們不再需要使用第三方控件來實現它,因為asp.net具有強大的功能來net開源框架...

  • g04編程實例,g03編程實例

    g04編程實例,g03編程實例 相關圖片數控車編程實例注解Java服務器頁面(JSP)作為一種構建動態web頁面的技術,正變得越來越流行。JSP不同于ASP、PHP和工作機制。通常,JSP頁面是在執行時編譯而不是解釋的數控車g03編程實...

  • ios是誰開發的,ios用什么開發

    ios是誰開發的,ios用什么開發 相關圖片ios開發難嗎Fmdb是面向對象的。它以OC的形式封裝SQLite的C語言API。它使用方便,不需要太多的數據庫操作知識。但也存在一些問題,比如跨平臺。因為它是用OC語言封裝ios 開發教程...

  • 證書異常怎么解決方法,模塊異常4怎么解決

    證書異常怎么解決方法,模塊異常4怎么解決 相關圖片如何能解除模塊異常1在IIS6中同時啟用了asp.net 2.0和asp.net 4.0之后,網站程序可能會發生以下錯誤:system.web.httpexception:pathqq綁卡異常怎么解決...

  • 一波又一波,一波還來不及

    一波又一波,一波還來不及 相關圖片一波接一波本文主要介紹了一種實用的bash shell排序方法,它適用于Ubuntu和其他Debian-Linux系統。您可以將以下內容作為朋友的命令行資源管理器。你可能來一波是什么意思...

  • kotlin android開發,安卓開發框架

    kotlin android開發,安卓開發框架 相關圖片android開發語言本文主要介紹Android開發的IDE、ADT、SDK、JDK、NDK等術語的定義。對這些概念感到困惑是件痛苦的事。本文簡要說明了這些術語的含義。讓我們共同努力android系統...

關注微信

变脸官网查询