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 ...
随机推荐
- SharePoint Adventures : Using Claims with Reporting Services
Cannot convert claims identity to a windows token. This may be due to user not logging in using win ...
- MaxScript通过.net发送邮件
Fn SmtpSendMail argSmtpAddress argSenderAddress argSenderPassword argTargetAddress argTitle argMessa ...
- dockerfile 构建tomcat
事先下载好tomcat和jdk的二进制包. 下载地址https://pan.baidu.com/s/1kWWHGEV 值得一说的是 tomcat的官方镜像 剪切了很多jdk和系统命令,所以生产环境建议 ...
- 从【BZOJ4173】谈做题技巧
题目描述 ----------------------------------------------------------------------------------------------- ...
- P4145 上帝造题的七分钟2
题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段 ...
- ElasticSearch.net NEST批量创建修改删除索引完整示例
本示例采用Elasticsearch+Nest 网上查了很多资料,发现用C#调用Elasticsearch搜索引擎的功能代码很分散,功能不完整,多半是非常简单的操作,没有成型的应用示例.比如新增或修改 ...
- 处理序列的几个小技巧:保持原序去重,命名切片以及Counter类
一. 去重并保持原来元素的顺序 def dedupe(items): h = [] for item in items: if item not in h: h.append(item) return ...
- Linux(Ubuntu)新建用户只有一个$问题
参考自: http://www.cnblogs.com/ylan2009/articles/2321177.html 1.用root登录操作 2.查看/etc/passwd文件中新建用户的权限 有没有 ...
- 如何使用Node爬虫利器Puppteer进行自动化测试
文:华为云DevCloud 乐少 1.背景 1.1 前端自动化测试较少 前端浏览器众多导致页面兼容性问题比较多,另外界面变化比较快,一个月内可能页面改版两三次,这样导致对前端自动化测试较少,大家也不是 ...
- 2016级算法期末上机-G.中等·Bamboo's Fight with DDLs II
中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串 ...