栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

const用法,区别const int*和int* const(顺便用图片教你看懂所有C语言变量类型声明)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

const用法,区别const int*和int* const(顺便用图片教你看懂所有C语言变量类型声明)

目录
  • 前言
  • const是什么?
  • const 修饰常量
  • const 修饰数组
  • const 修饰指针
  • const 修饰函数
  • 顺时针螺旋法则(C程序员们用了它,就可以看懂任何C语言变量类型声明)
  • 总结

前言

❤️ :热爱编程学习,期待一起交流。企鹅(2466200050)!
:博主是河南牧业经济学院大一在读学生,水平有限,如有发现错误,期待指点!
:以下是我参考了大量资料和文章后对const用法的一些拙见,期待大佬们的点评。

const是什么?
  • const是C语言的一个关键字,是constant英文(永恒的;不变的)的缩写。在C语言的英文书籍里一般翻译为常量。因为可以变的我们叫做变量,那不变的就叫做常量嘛。
  • C语言中const功能很强大,它可以修饰变量、数组、指针、函数参数等。
const 修饰常量
  • 修饰常量就简单了,直接在前面加const就行了。
const int i = 10;
i = 20;//error,因为const修饰了变量i,i的值不可改变了。所以不可能把20赋值给i。
  • 我们把这里的i叫做常变量。
  • 注意
const int i = 10;和int const i = 10;两个表达式意思一样,我在下面的“顺时针螺旋法则”会讲到。
const 修饰数组
const int arr[5] = {1,2,3,4,5};
arr[0] = 2;error道理同上。
const 修饰指针
  • 先明晰一个事情:为了更好理解。读下文中的指针二字可以替换为地址二字
  • 为了确保我们清晰的知道const的意思。一下代码是最好的解释。
int a = 5 b = 10, c = 15;
const int* p;     //p 是指向  整型常量 的 指针

p = &a;           // 说明p指向什么地方。(p指向a的地址)

*p = 6;           // 不可以通过指针p改变a的值。
p = &b;           // 但是指针p却可以被改变。



int *const t = &c;  //t 是指向 整型 的 常量指针。



*t = 16;            // 可以通过指针t改变c的值.    

t = &a;             // 因为t是一个常量指针. 
  • p 是一个指向 整型常量 的 变量指针,这让你可以改变它指向的地址,但不能改变它指向的值。通常我们使用的时候用在C语言字符串,你可能想改变到底
    指向的哪一个字符串,但是不想改变字符串的内容。
  • t 是 一个常量指针,或者说是 固定的指针,它指向的值不可改变。通常当我们不需要使用空指针(NULL)的时候可以使用这种写法。
const 修饰函数
  • const关键字修饰函数参数,对参数起限定作用,防止其在函数内部被修改。所限定的函数参数可以是普通变量,也可以是指针变量。
  • 和const修饰指针差不多。
void fun(int* const i)
{

   i++; //error,i的值不可修改

}
void fun(const int* p)
{

	(*p)++; //error,p指向空间的值不可修改
	
}
  • 有人会说,你讲了这么多结论,但是以后碰见类似的例子怎么看呢?
  • 下面我来说说Clockwise/Spiral Rule(“顺时针螺旋法则”)。
顺时针螺旋法则(C程序员们用了它,就可以看懂任何C语言变量类型声明)
  • 我们拿上面的const修饰指针为例来说一下。
  • 用图片讲解就会使mind显得无与伦比的清晰。open mind。
    总的来说:从变量名(ptr)开始,沿着顺时针螺旋移动。(向左移动)
    • 沿着顺时针螺旋移动。第一个遇到的符号是`*’。这是指针的意思。
    • 所以ptr是个指向什么的指针!
    • 继续沿着顺时针螺旋移动。我们遇到了int。
    • 所以prt是一个指向整型的指针!(ptr is a pointer to int!)
    • 沿着顺时针螺旋移动。第一个遇到的符号是`*’。这是指针的意思。
    • 所以ptr是个指向什么的指针!
    • 继续沿着顺时针螺旋移动。我们遇到了const
    • 说明prt是个指向常量的指针
    • 继续沿着顺时针螺旋移动。我们遇到了int
    • 说明prt是个指向整型常量的指针
    • 沿着顺时针螺旋移动。第一个遇到了const。
    • 说明ptr是个常变量。
    • 继续沿着顺时针螺旋移动。遇到的符号是`*’。
    • 说明const ptr是个常量指针(即ptr不可变)。
    • 继续沿着顺时针螺旋移动。我们遇到了int。
    • 说明ptr是个指向int类型的常量指针。
    • 继续沿着顺时针螺旋移动。我们遇到了const。
    • 说明ptr是个指向整型常量的常量指针!
总结
  • 仅仅对于const来说,如果const关键词出现在左边,比如 ‘const int* p’,他的意思就是指针指向的数据不可改变。如果在左侧(int * const p)说明他的指针不可改变。
  • 如果你觉得我的文章对你有帮助欢迎关注点赞收藏⭐️留言。

参考文献:
[1] Matt Price . What is the difference between const int*, const int * const, and int const *?[cp]. America :Stack Overflow,2021

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号