const修饰符相关
const修饰符相关
const修饰符表明一个变量是常量,大致分为三类:常量数组(等同于常量指针),常量指针,指向常量的指针。
常量数组中数据都是不可修改的,任何试图修改常量数组中的数据的操作都会报错。
常量指针,指针本身是常量,是不可以修改它的指向的,但是可以修改它指向变量的数值,它的修饰符一般放在中间,形如:
int* const p。指向常量的指针,指针用于指向常量,因为常量具有不可修改的特点,所以任何希望通过普通指针来指向常量然后来修改常量的行为是非常恶劣的。所以如果想指向常量,就要通过指向常量的指针,形如:
const int *p。
常量指针和指向常量指针的辨析
常量指针只能指向对应类型的非常量的变量,可以通过解引用来修改它指向数据的值,但是不可以修改它的指向。注意:指向const的指针中*必须放在类型说明符后面,形如
int *const a;#include <stdio.h>
int main (void) {
int a = 4;
int b = 5;
const int c = 6;
int* const d = &a;
// d = &b; 这个是会报错的因为d是const指针不可以指向其他地方
printf("d = %d\n", *d);
*d += 10;
printf("d = %d\n", *d);
return 0;
}
/**
d = 4
d = 14
**/指向常量的指针,就像它的定义一样,默认来看它使用来指向常量的,因为常量的不可修改性,我们不希望通过普通的指针来指向常量来达到修改常量的效果,所以我们使用指向常量的指针。
指向常量的指针不能通过它来修改被指向的对象,只能通过它来访问对应常量的内容,而且因为指针本身并非常量,他自身也可以被修改指向其他对象。而且由于语言的宽泛性,指向常量的指针也可以指向非常量,这样我们也不一定通过它来修改被指向的非常量。
#include <stdio.h>
int main (void) {
int a = 4;
int b = 5;
const int c = 6;
// 常量指针可以指向可以指向非常量和常量,但是都可以访问但是不可以修改
const int *d = &c;
printf("d = %d\n", *d);
// *d += 1;这个会报错
d = &a;
printf("d = %d\n", *d);
// *d += 2; 这个也会报错
// 普通指针不可以指向常量!企图通过这种方式修改常量的行为时未定义的,一般不可使用
int *e = &c;
printf("e = %d\n", *e);
*e += 2;
printf("e = %d", *e);
return 0;
}
/**
d = 6
d = 4
e = 6
e = 8
**/
const修饰符相关的更多相关文章
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...
- 转载----C/C++ 中 const 修饰符用法总结
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...
- C++中 容易忽视的const 修饰符
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...
- [Reprint]C++函数前和函数后加const修饰符区别
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...
- C++函数前和函数后加const修饰符区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- [C++]const修饰符
Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...
- const修饰符与函数
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...
- const修饰符限定的常量
类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...
随机推荐
- Python——requests模块
一.安装模块 pip install requests 二.引用 import requests 三.get方法 #GET访问页面 r = requests.get(url) print(r.text ...
- NFS 共享存储
目录 环境准备 NFS服务端 NFS客户端 部署时常见报错 httpd服务 NFS 共享存储的坑 环境准备 主机名 WanIP(Wide Area Network) LanIP(Local Area ...
- codeforces 1077D Cutting Out 【二分】
题目:戳这里 题意:给n个数的数组,要求找k个数满足,这k个数在数组中出现的次数最多. 解题思路:k个数每个数出现次数都要最大化,可以想到二分下限,主要是正确的二分不好写. 附ac代码: 1 #inc ...
- python 3.7 利用socket文件传输
参考:https://www.cnblogs.com/VseYoung/p/socket_1.html 参考 https://blog.csdn.net/a19990412/article/detai ...
- linux repo init 遇到的问题
问题描述: 利用repo从远程服务器上取代码时候,出现错误 fatal: cannot make .repo directory:Permission denied, 加了sudo 之后,还是不行, ...
- codefroces 7C
C. Line time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- Leetcode(106)-从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7 ...
- Leetcode(35)-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 这个题目很简单,因为它是给定的排序数组而且没有重 ...
- HDU 4649 Professor Tian(概率DP)题解
题意:一个表达式,n + 1个数,n个操作,每个操作Oi和数Ai+1对应,给出每个操作Oi和数Ai+1消失的概率,给出最后表达式值得期望.只有| , ^,&三个位操作 思路:显然位操作只对当前 ...
- Os-hackNos-1(drupal7+suid提权)
一.信息收集 得到 ip是 192.168.56.101 , 端口开启了22和80,扫目录发现drupal 7 访问一下呢 在exploit-db上面搜索到存在相关的漏洞,而且是用直接上msf 使用第 ...