看Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法这本书的时候看到有一个说多用类型常量,少用#define预处理指令 ,在这里面有说到指针常量,之前学C C++的时候也遇到过, 现在算是将这些小结。

最重要的一句秘诀就是:*(指针)   const(常量)  谁在前先读谁,谁在前谁不允许改变。

下面是C C++ OC中的例子,其中在OC中指针常量只能赋值一次,不能改变

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {

//      C -----------------------------------------
        ,b=;

        //常量指针
        int const *p1=&a;

        //指针常量
        int *const p2=&b;

         NSLog(@"p1=%d p2=%d a=%d b=%d",*p1,*p2,a,b);

        //改变指针   将p1指向a p1指针变量存的地址改变 b的地址改为a的地址
        p1=&b;

        NSLog(@"p1=%d p2=%d a=%d b=%d",*p1,*p2,a,b);

        //改变变量
        *p2=;    // p2 指针变量存的地址不变 改变的是p2指的变量的值
        NSLog(@"p1=%d p2=%d a=%d b=%d",*p1,*p2,a,b);

//      OC------------------------------------------

        NSString *str = @"abc";
        NSString *str2=";

        NSLog(@"str的地址:%p 指向变量的地址:%p 指向变量值:%@",&str,str,str);

        NSLog(@"str2的地址:%p 指向变量的地址:%p 指向变量值:%@",&str2,str2,str2);

        NSString const * strp=str;

        NSLog(@"strp=%@  str=%@  str2=%@",strp,str,str2);

        strp=str2;

        NSLog(@"strp=%@  str=%@  str2=%@",strp,str,str2);

        //在oc中NSObject类型指针常量赋值 无法改变常量
        NSString *const strp1=str2;

        NSLog(@"strp1=%@  str=%@  str2=%@",strp1,str,str2);

        str2=@"xyz";

        NSLog(@"strp1=%@  str=%@  str2=%@",strp1,str,str2);
    }
    ;
}

#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {

    string str1 = "abc";
    ";

    //常量指针
    string const *str1Prt = &str1;

    //指针常量
    string * const str2Prt = &str2;

    // 获取str1Prt 指针存的地址、指向的地址  &str1Prt是自身的地址
    cout << str1Prt << " " << *str1Prt << endl;

    //改变指针
    str1Prt = &str2;

    cout << str1Prt << " " << *str1Prt << endl;

    cout << str2Prt << " " << *str2Prt << " " << str1 << " " << str2 << endl;

    //改变变量
    *str2Prt = "fff";

    cout << str2Prt << " " << *str2Prt << " " << str1 << " " << str2 << endl;

    ;
}

C C++ OC指针常量和常量指针区别的更多相关文章

  1. C和指针 第三章 指针常量与常量指针

    c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr in ...

  2. c++ 指针常量,常量指针

    当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...

  3. C++中指针常量和常量指针的区别

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...

  4. 【转】C++易混知识点1: 指针常量和常量指针的区别,附有详细案例解释

    熟悉C++也已经有一些年头了,今天突然翻出当年浏览的书籍,对一些概念居然生疏了,指针常量和常量指针由于 指针 这一特殊的对象而变得难以区别.因此,在思考再三之后,决定写下该篇总结,加强对他们的区别: ...

  5. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  6. C++ 指针常量和常量指针

    1.指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改. 2.常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改.

  7. c语言常量指针赋值给变量指针导致警告

    常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指 ...

  8. 数组/指针/const/字符串常量的使用传值问题

    #include<stdio.h> #include<string.h> int main() { ] = "abcd"; //常指针a指向字符串常量&qu ...

  9. 再学C/C++ 之 指针常量 和 常量指针

    (1)指针常量,将指针的指向当成常量.即指针变量的值只能在定义的时候初始化,定义后不能修改,也就是说不能改变指针变量的指向.但是不影响所指对象的访问特征.其定义形式为: 类型 * const 指针 / ...

  10. c++中指针常量,常指针,指向常量的常指针区分

    const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...

随机推荐

  1. C#之工厂

    工厂在我看来分为三种分别都是简单工厂,工厂方法,和抽象工厂,这三种都是将使用和创建分开的一种模式 接下来我来介绍一下我理解的简单工厂模式: 在平时我们需要使用生产对象的一个类当我们需要new 一个对象 ...

  2. bash shell & 环境变量

    root是没有~/.bashrc的,只. /etc/profile即可,/etc/profile和~/.bashrc的作用类似,只是作用域不同,都是写死的export,也有动态的脚本去设置命令和环境变 ...

  3. asp.net mvc 上传图片 摘自mvc 高级编程第311页

    Image Uploads I am going to complete the SportsStore user experience with something a little more so ...

  4. 跨域处理之Jsonp

    一.认识Jsonp JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式 ...

  5. Android 中 LayoutParams 的用法

    一个控件应当使用它的父控件的 LayoutParams 类型.因此,一个 TableVow 应该使用 TableLayout.Params . 所以,以一个 TableRow 为例: TableRow ...

  6. 【12c OCP】CUUG OCP认证071考试原题解析(34)

    34.choose two View the Exhibit and examine the structure of the PRODUCT_INFORMATION and INVENTORIES ...

  7. 视频video遇到一些坑

    1.video层级最高问题 解决方案思路:当点击其他按钮触发事件时,视频层级挡住其他外层,比如会挡住弹窗,这是应该让视频暂停播放且隐藏,这是视频这个地方会空一个位置可以放一张封面占位,这样就解决视频层 ...

  8. wpa2破解代码思路(教你写poc)

    前言:此篇关于1.wpa2协议漏洞的产生原因:2.scapy这个数据包库的基础:3.最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~ 本文作者:i春秋签约作家——kaikaix 1.大家 ...

  9. Laravel 完整开源项目大全

    来自 Laravel学院:http://laravelacademy.org/ http://laravelacademy.org/laravel-project 原型项目 Laravel 5 Boi ...

  10. springmvc常遇到的错误

    错误1: HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError ...