[iOS/C/C++]const 指针 权限

const修饰符表示只读,为了内存的安全性,程序的可读性等等原因,常常会给指定的内存分配不同的权限。(新手容易忽略这些问题)

在C/C++开发中使用的更加广泛,函数参数,类的构造函数的参数,全局变量等等地方经常使用。

下面的代码解释了指针和指针数组的权限分配。

备注:

new int (66)是分配1个int内存,并赋值为66

new int [66]是分配66个int内存,不会赋值,可以用 memset(void *, int, size_t) 全部赋值为0



#pragma mark - 指针权限

    

    // 可以修改指针所指向的内存中的值,但不可以指向新的内存

    int *const i1 = new int (66);

    i1 = new int (71);   // Error, Read-only variable is not assignable

    *i1 = 7;

    

    // 可以指向新的内存,但不可以修改指针所指向的内存中的值

    int const *i2 = new int (66);

    i2 = new int (72);

    *i2 = 7;    // Error, Read-only variable is not assignable

    

    // 和上面一个权限分配相同

    const int *i3 = new int (66);

    i3 = new int [2];

    *i3 = 7;    // Error, Read-only variable is not assignable

    

    // 不可以修改指针所指向的内存中的值,也不可以指向新的内存

    const int *const i4 = new int (66);

    i4 = new int [2];   // Error, Read-only variable is not assignable

    *i4 = 7;    // Error, Read-only variable is not assignable

    

#pragma mark - 指针数组权限

    

    // 可以修改数组中指针所指向的内存中的值,但数组中指针不可以指向新的内存,数组也不可以指向新的内存

    int *const ii1[] = {new int (66), new int (67), new int (68)};

    ii1 = {new int (7)};    // Error, Read-only variable is not assignable

    ii1 = {new int (77), new int (77), new int (77)};    // Error, Read-only variable is not assignable

    ii1[0] = new int (8);   // Error, Read-only variable is not assignable

    *ii1[0] = 9;

    

    // 数组中指针可以指向新的内存,但不可以修改数组中指针所指向的内存中的值,数组也不可以指向新的内存

    int const *ii2[] = {new int (66), new int (66), new int (66)};

    ii2 = {new int (7), new int (7), new int (7)};    // Error, Array type 'const int *[3]' is not assignable

    ii2[0] = new int (8);

    *ii2[0] = 9;    // Error, Read-only variable is not assignable

    

    // 和上面一个权限分配相同

    const int *ii3[] = {new int (66), new int (66), new int (66)};

    ii3 = {new int (7)};    // Error, Array type 'const int *[3]' is not assignable

    ii3[0] = new int (8);

    *ii3[0] = 9;    // Error, Read-only variable is not assignable

    

    // 不可以修改数组中指针所指向的内存中的值,数组中指针也不可以指向新的内存,数组也不可以指向新的内存

    const int *const ii4[] = {new int (66), new int (66), new int (66)};

    ii4 = {new int (7)};    // Error, Read-only variable is not assignable

    ii4[0] = new int (8);   // Error, Read-only variable is not assignable

    *ii4[0] = 9;    // Error, Read-only variable is not assignable


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值