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

简介: const用法,区别const int*和int* const(顺便用图片教你看懂所有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是指针,往左边是const int* 说明是指向整形常量的指针*/
p = &a;           // 说明p指向什么地方。(p指向a的地址)
/*错误写法*/
*p = 6;           // 不可以通过指针p改变a的值。
p = &b;           // 但是指针p却可以被改变。
int *const t = &c;  //t 是指向 整型 的 常量指针。
/*const t说明t是常量指针,往坐边看是int类型,所以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)说明他的指针不可改变。
  • 如果你觉得我的文章对你有帮助🎉欢迎关注🔎点赞👍收藏⭐️留言📝。
相关文章
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
1686 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
499 11
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
354 1
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
815 2
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
1482 10
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
231 2
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
1189 5
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
1424 4