C C++ OC指针常量和常量指针区别
看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指针常量和常量指针区别的更多相关文章
- C和指针 第三章 指针常量与常量指针
c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr in ...
- c++ 指针常量,常量指针
当const遇到指针 一般来说,const修饰指针可以分为下面的集中情况. 描述 例子 含义 备注 const在*的左边 const int *b=&a; int const *b=& ...
- C++中指针常量和常量指针的区别
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...
- 【转】C++易混知识点1: 指针常量和常量指针的区别,附有详细案例解释
熟悉C++也已经有一些年头了,今天突然翻出当年浏览的书籍,对一些概念居然生疏了,指针常量和常量指针由于 指针 这一特殊的对象而变得难以区别.因此,在思考再三之后,决定写下该篇总结,加强对他们的区别: ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- C++ 指针常量和常量指针
1.指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改. 2.常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改.
- c语言常量指针赋值给变量指针导致警告
常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指 ...
- 数组/指针/const/字符串常量的使用传值问题
#include<stdio.h> #include<string.h> int main() { ] = "abcd"; //常指针a指向字符串常量&qu ...
- 再学C/C++ 之 指针常量 和 常量指针
(1)指针常量,将指针的指向当成常量.即指针变量的值只能在定义的时候初始化,定义后不能修改,也就是说不能改变指针变量的指向.但是不影响所指对象的访问特征.其定义形式为: 类型 * const 指针 / ...
- c++中指针常量,常指针,指向常量的常指针区分
const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...
随机推荐
- C语言/C++编程学习:和QT零距离接触的意义
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- python中的内置函数(一), lambda, filter, map
https://www.processon.com/view/link/5c10da0ce4b099ae3e137bf6 1.内置函数 内置函数就是python中提供的,可以直接拿来用的函数,比如pr ...
- C#写入文件
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\testDir\test2.txt", t ...
- 解决:sql server无法在C盘下创建database/操作系统错误5(拒绝访问)
问题: ——无法在C盘的任何位置创建数据库文件 ——在非系统盘的F盘可以创建数据库文件 解决方法1:禁用“以管理员批准模式运行所有管理员" 解决方法2:打开C盘对Users用户的完全控制权限 ...
- KVM到KVM之v2v迁移
1.源KVM虚拟主机node1 (1).查看源KVM虚拟主机上的虚拟机列表,本文计划将oeltest01虚拟机迁移到其它KVM虚拟主机中. (2).查看oeltest01虚拟机磁盘文件位置/data/ ...
- js简单正则表达式验证密码
包含3种及以上 var reg = new RegExp("^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\ ...
- django入门-自定义管理界面-part7
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html 完全翻译自官方文档 https://docs.djangoproje ...
- 利用PHP的curl批量导出文件
场景 1.需要从网站中导出大量的文件,包括有图片格式,文档格式等附件内容. 2.分文件夹来导出不同的数据 <?php header("Content-Type:text/html;ch ...
- CentOS+uwsgi+django+nginx 环境部署及分析
写在部署前 在线上部署django项目时,比较成熟的方案是:nginx + uWSGI + Django. nginx和Django 都比较熟悉了,uWSGI是什么呢?WSGI是一个协议,python ...
- [温故]图解java多线程设计模式(一)
去年看完的<图解java多线程设计模式>,可惜当时没做笔记,导致后来忘了许多东西,打算再温习下这本书,顺便在这里记录一下~ 1.顺序执行.并行.并发 顺序执行:多个操作按照顺序依次执行. ...