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 ...
随机推荐
- 学习css(一)
font:12px/22px "\5B8B\4F53",Arial, Helvetica, sans-serif font:12px/22px 指 字体大小/字体行高 " ...
- leetcode 罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D 和M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II ,即为两个并列的 1.1 ...
- Android 如何查看源码 (eclipse 按住 ctrl )
首先要确认 Android SDK Manager 下载并安装了 sources.然后在代码中按住 ctrl 在点一个类名, 如果打开的页面是找不到源码,就点那个按钮,然后找到源码所在的文件夹,就可以 ...
- 虚拟化安全 sandbox 技术分析
原文链接:https://cloud.tencent.com/developer/news/215218 前言: libvirt-4.3搭配qemu-2.12使用,如果使用默认的编译选项,可能会让qe ...
- GO学习笔记 - 没有条件的 switch 同 switch true 一样。
官方教程:https://tour.go-zh.org/flowcontrol/11 没有条件的 switch 同 switch true 一样. 这一构造使得可以用更清晰的形式来编写长的 if-th ...
- Mysql 优化与测试
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 以下的测试数据根据环境的不同所耗费的时间有所不同,例如我在腾讯云上的测试 ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(14)
14.(6-13) choose the best answer:View the Exhibit and examine the structure of the ORDERS table.Whic ...
- SpringMvc+ajax 实现json格式数据传递
传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...
- C语言 一些算法
1,斐波那契数列 ①递归 时间复杂度O(2^n)#include <stdio.h> int fib(int n){ ||n==) ; ) + fib(n-); } int main(){ ...
- [Swift实际操作]八、实用进阶-(3)闭包在定时任务、动画和线程中的使用实际操作
闭包的使用相当广泛,它是可以在代码中被传递和引用的具有独立功能的模块.双击打开之前创建的空白项目.本文将演示闭包在定时任务.动画和线程中的使用.在左侧的项目导航区,打开视图控制器的代码文件:ViewC ...