iOS进阶之路

IOS:const的使用

2019-01-18  本文已影响61人  康小曹

首先摆出代码:

int main() {
    @autoreleasepool {
        int a = 10;
        const int *p = &a;
        int const *p2 = &a;
        int * const p3 = &a;
        
        int b = 20;
        *p = 12;
        p = &b;
        
        *p2 = 12;
        p2 = &b;
        
        *p3 = 12;
        p3 = &b;

        printf("%d",*p);
        printf("%d",*p2);
        printf("%d",*p3);
    }
}

问:最后输出结果是?
答案:


const

解释:
const的用法:修饰的部分不可变,为常量,但是不会改变变量的作用域和生命周期。
情况1:

const int *p = &a

此时const修饰的是p,也就是p所指向的内存地址的值!!,所以当尝试使用p改变被const修饰的常量时,编译器报错,只读的变量不可以被再次赋值;
情况2:

int const *p = &a;

此时const修饰的仍然是*p,同情况1;
情况3:

int *const p = &a;

此时const修饰的是变量p,也就是局部变量p不能被改变,所以当尝试使用*p改变p所指向的内存地址a的值时,是可行的。但是当尝试重新给p赋值,让其指向b的内存地址时,编译器报错。
情况4:

int const c = 10;
const int c = 10;

这中情况同情况一和情况二一样,都是修饰变量c,也就不存在指针那么复杂的情况。

const和宏
const编译时确定,如果出错,编译器会报错;
宏是预编译,只做拷贝操作,不会报错;
const不能定义函数;
宏可以定义函数

上一篇下一篇

猜你喜欢

热点阅读