static、const和sizeof关键字

一、static关键字

static关键字的作用有如下两个:

  • 修饰存储类型,使之成为静态存储类型。其中,在函数内定义的静态局部变量,存放于内存中的静态区,所以即使函数运行结束,也不会被销毁,函数下次运行时,仍能取到它的值。在函数外定义的静态全局变量,作用域仅限于定义该变量的文件中,不能被其他文件通过extern引用。
  • 修饰链接属性,使之成为内部链接属性。静态函数只能在声明它的源文件中使用。
二、const关键字

const关键字的作用有如下三个:

  • 1、声明常变量,是的指定的变量不能被修改。
const int a = 1; // a的值不能被修改
const int *p1; // p1为指向整型常量的指针,p1的值可以修改,但是p1指向的值不能修改
int *const p2; // p2为指向整型的常量指针,p2的值不能修改,但是p2指向的值可以修改
const int *const p3; // p3为指向整型常量的常量指针,p3及其指向的值都不能修改
  • 2、修饰函数形参,使其在函数内部不能被修改。
- (int)square:(const int)a {
    return a*a;
}
  • 3、修饰函数返回值,使其不能被修改。
三、sizeof关键字

sizeof是在斌阿姨阶段处理,且不能被编译为机器码。sizeof的结果等于对象或类型所占的内存字节数。sizeof的返回值类型为size_t;

  • 变量
int a; // sizeof(a)为4
  • 指针
int *p; // sizeof(p)为4
  • 数组
int a[5]; // sizeof(a)为4*5(数组大小)
int b[0]; // sizeof(b)为0
  • 结构体
struct(int a; char c)s; // sizeof(s)为8,与结构体字节对齐有关

【注1】展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的成员的整数倍。
【注2】结构体大小必须是所有成员大小的整数倍,这里所有成员计算的是展开后的成员,而不是将嵌套的结构体当做一个整体。
【注3】不能对结构体中的位域成员使用sizeof。

  • void
sizeof(void) // 1
sizeof(void *) // 4
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容