指针知识梳理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等 名字常量 ...
随机推荐
- 可重入锁ReentrantLock--转载
突然被问到什么是可重入锁?脑袋里闪过了n中概念,最终没有找到,从网上学习一下. 原文地址:https://www.ibm.com/developerworks/cn/java/j-jtp10264/ ...
- Flask设置配置文件
Flask修改配置: from flask import Flask app = Flask(__name__) app.config['DEBUG'] = True @app.route('/') ...
- 设计模式六大原则(三):依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则(DIP)定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码 ...
- HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...
- HDU 1506 Largest Rectangle in a Histogram(DP)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- 【习题 6-7 UVA - 804】Petri Net Simulation
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟就好 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sever ...
- ajax缓存 header头文件
浏览器第一次访问服务器的时候,需要从服务器加载很多静态资源,并将这些资源文件缓存在浏览器中,当再次访问页面的时候,如果有相同资源文件就直接到缓存中去加载,这样就会降低服务器的负载和带宽,加快用户访问, ...
- Dcloud课程2 什么是Dcloud
Dcloud课程2 什么是Dcloud 一.总结 一句话总结:DCloud提供了一套快速开发应用的跨平台技术方案. 1.DCloud的产品架构? MUI+(H5+)+HBuilder 2.什么是MU ...
- synchronized和ReentrantLock区别
一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...
- J实现时间格式的转换(附加对象的转换)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...