指针知识梳理6-const与指针
const 定义的变量为仅仅读变量。在语法层面上通过这个变量去改动内存是不同意的。
可是对于下面代码。就有非常多人绕了:
const int *p1; //p1能变。*p1不能变
int const *p2; //p2能变。*p2不能变
int *const p3; //p3不能变。*p2能变
我们通过代码来验证说明这三种写法:
</pre><p></p><pre>
#include <stdio.h>
int main()
{
int a;
int b;
const int *p1 = &a;//初始化
int const *p2 = &a;//初始化
int *const p3 = &a;//初始化 a = 1; //说明a相关的内存可读写 // p1 p2 是一样效果。
p1 = &b; //编译通过,说明p1本身能够写。
*p1 = 1; //编译不通过,说明语法上不同意 通过p1 去写a 的内存。 p2 = &b; //编译通过,说明p2本身能够写。
*p2 = 1; //编译不通过, 说明语法上不同意 通过p2 去写a 的内存。
//注意以上a 本身的内存是可读写的,仅仅只是通过p1 p2没有权限去改动。 p3 = &b; //编译不通过,说明p3本身不能够写。
*p3 = 1; //编译通过。说明语法上 能够通过p3去改动a的内存。 return 0;
}
对于上面记忆有个小技巧,当 const 在*的左边的时候,修饰的是 *p ,则 *p 是不能改变的。也就是说所谓不能改变p指向的内存。
当const 在*右边的时候,修饰的是 p ,p不能改变。
const 与指针结合 用来提高程序猿写代码的严谨性:
比方下面代码
void strcpy(char *src ,const char *dest);
这个strcpy函数期望做的是 把dest指向的内存处的字符串复制到 src指向的内存处。
那么事实上 这样的函数接口也可以全然实现,可是。假设在实现strcpy的时候,在函数中不小心改动了 dest指向的内存,那么就改函数接口的本意有悖,由于 依照正常逻辑,你拷贝东西的时候不会改变原来的东西。
比方不小心写了下面代码
void strcpy(char *dest ,char *src)
{
*src = 'a';
//其它代码
}
这样语法上没问题。可是执行就有问题了。
假设接口设计成 const char *src
void strcpy(char *dest ,const char *src)
{
*src = 'a'; //当写出这种代码的时候编译就会报错,提高了代码的安全性。 //其它代码
}
指针知识梳理6-const与指针的更多相关文章
- 【原创】浅谈指针(五)const和指针
前言 过了几个月再次更新.最近时间也不多了,快要期中考试了,暂且先少写一点吧. 本文仅在博客园发布,如在其他平台发现均为盗取,请自觉支持正版. 练习题 我们先来看几道题目.如果这几道题都不会的话,就先 ...
- const 指针与指向const的指针
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...
- 指针总结指向const的指针、const指针、指向const指针的const指针
指针的一些总结 const与指针 指向const的指针指的是指针指向的数据是常量,不可以被修改,但指针变量本身可以被修改,如const int *p:严格说不能用指针间接修改指向的数据,但该变量可 ...
- C++中指向对象的常指针和指向常对象的指针
指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...
- const 相关知识 const和指针、const和引用
以前老是对const概念不清不楚,今天算是好好做个笔记总结一下.以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数. 常量指针,指针 ...
- [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组
程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...
- c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html 1.利用指针交换两个字符串方法?(这题是我当年读大一的时候看到的,好怀 ...
- C++中的const和指针组合
在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...
- 面试集锦-常量,const, const 对指针的影响
在C语言中不可改变的数据(量)就是常量 在C语言中有三种常量 字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等 名字常量 ...
随机推荐
- vue-cli 和webpack
https://note.youdao.com/share/?id=d1851db9f0fe0a691798fac823849564&type=notebook#/C045BC3E7DC144 ...
- Manning.EJB.3.in.Action.2nd.Edition
Manning.EJB.3.in.Action.2nd.Edition http://files.cnblogs.com/files/rojas/EJB_3_in_Action_2nd_Edition ...
- ORA-16055: FAL request rejected
主库频繁报错如下: ORA-16055: FAL request rejected 解决办法: ALTER SYSTEM SET log_archive_dest_state_2='DEFER' ...
- Codeforces Round #194 (Div. 2) 部分题解
http://codeforces.com/contest/334 A题意:1-n^2 平均分成 n 份,每份n个数,且和相同 解法 : 构造矩阵1-n^2的矩阵即可 ][]; int main() ...
- Redis .Net客户端源码
1.简单介绍 当前NoSql使用已经极为普遍,无论是Java生态圈,还是.net生态圈.大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.主流的技术有:H ...
- Chome 浏览器,您的连接不是私密连接
网上搜索了半天,最后才发现是去广告插件/软件的原因, 关掉广告插件/者软件,或者重新导入证书, 就可以了.
- PythonNET网络编程3
IO IO input output 在内存中存在数据交换的操作都可以认为是IO操作 和终端交互 : input print 和磁盘交互 : read write 和网络交互 : recv send ...
- 洛谷 P1230 智力大冲浪
洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?! ...
- amazeui学习笔记--css(HTML元素1)--按钮Button
amazeui学习笔记--css(HTML元素1)--按钮Button 一.总结 1.button的基本使用:a.am-btn 在要应用按钮样式的元素上添加 .am-btn,b.颜色 再设置相应的颜色 ...
- LED恒流设计