关闭

const,static,extern详解

标签: staticconst
323人阅读 评论(0) 收藏 举报
分类:

一、const详解

*如果试图修改由const修饰符修饰所声明的变量,编译器会报错。*

const修饰符修饰的指针:

  1. const int *p 和 int const *p
    指针p的指向可以改变,但p指向的内容不可以改变。
      const int  *a;
        int b;
        a = &b;
        *a = 100;//(编译报错)
  1. int *const p;
    指针p的指向不可以改变,但p指向的内容可以改变。
        int *const a;
        int b;
        a = &b;//(编译报错)
        *a = 100;
  1. const int *const p;
    指针p的指向不可以改变,p指向的内容也不可以改变。
        int b = 100;
        const int *const a;
        a = &b; //(编译报错)
        *a = 100;//(编译报错)

结论:const修饰的不能改变。

二、static

static修饰符修饰的变量意味着该变量仅在定义此变量的编译单元(oc中的.m文件)内可见。假如声明变量时不加static,编译器会为它创建一个“外部符号”(external symbol),如果两个编译单元内拥有同名的变量,编译器会抛出一条错误信息。实际上,如果一个变量同时声明为static const,编译器根本不会创建符号,此时会跟#define预处理命令一样。

在实现文件使用static const 来定义只在编译单元内可见的常量。(未在全局符号表中)

三、extern

如果要公开某个常量、声明一个外界可见的常值变量。此类常量需要防止“全局符号表”(global symbol table)。
定义方式: 常量在头文件中声明,在实现文件里定义。

//header file
extern NSString *const externValue;
//implementation file
NSString *const externValue = @"VALUE";

在头文件中使用extern 声明全局常量,并且在相关实现文件中定义其值。(全局符号表中)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15758次
    • 积分:98
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类