指针知识梳理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等 名字常量 ...
随机推荐
- 李笑来~执行力WWH
什么是秘密 秘密是指只有极少数人知道的实用信息.这个实用信息可以为知道且懂得运用的人获得收益,这个收益可能包括钱.名声和快感. 什么是执行力 执行力=What + Why + How,即WWH 执行力 ...
- IE中实现placeholder
简介:IE本身不支持Placeholder这种先进的特性,但是我们又必须且仅仅支持IE,所以网上找了一个支持placeholder的方法 考虑版权,以及知识产权原因,只放链接: http://blog ...
- 一个小的考试系统 android 思路
一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...
- golang API 例子实现
golang API 例子实现 http://files.cnblogs.com/files/rojas/astaxie.zip
- hdu5387 Clock
Problem Description Give a time.(hh:mm:ss).you should answer the angle between any two of the minute ...
- 学习笔记(四):jQuery之动画效果
1.show()显示效果 语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒.也可以为slow"," ...
- FAILOVER详细步骤
FAILOVER详细步骤 1.Flush主库任何未传输的redo到目标备库 如果primary可以mount,则可以flush任何主库的未传输redo到备库,如果操作成功返回,则可以保证failove ...
- GO语言学习(十二)Go 语言函数
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- 【Educational Codeforces Round 33 D】Credit Card
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次遇到0的时候,看看当前累计的delta是多少. 如果大于0,则temp = d-delta; 小于0,取temp2 = min( ...
- amazeui学习笔记--css(HTML元素2)--代码Code
amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...