首页 > 其他分享 >C语言const 和 *的爱恨情仇

C语言const 和 *的爱恨情仇

时间:2024-03-14 19:29:22浏览次数:26  
标签:第三者 const 常量 指向 情仇 C语言 我们 指针

相信所有在学C的人都对const 和 *这对小情侣非常熟悉,实在是太烦了。他们中间还时不时得加个第三者什么int,char啥的。看了很多资料再加上我自身的总结提炼理解以后,我终于把他们理清了。

首先const这个关键字是用来修饰常量的,我们就简称它为常量。定义指针的时候都会用到*,int *p。因此我们简称*为指针。

起好简称后我们来看看这对小夫妻,记得抛开一切第三者,我们眼里只有这对小夫妻。const *(记得千万别管第三者在哪,我们眼里只有他俩),常量在前指针在后,我们叫他常量指针。这是个指针,一个指向常量的指针。因此它指的那个东西,就是以它的值为地址的那个东西(指针不懂的可以留言,看看我的理解足不足够为大家解答)。那个东西是个常量,它不能通过我们的常量指针来修改(当然别的指向他的指针还是可以改他的)。既然我们的常量指针是个指针,那他肯定想指谁就指谁,因此他指向的内存是可以改的。

上图!!!cLion的报错应该够清晰了吧!!!

接下来我们来看他们的另一种组合 *const,同理记得抛开第三者。很显然指针在前常量在后这是个指针常量。这是个常量,这个指针是个常量,因此他指向的内存是不能改的,只要指向的地方(地址)不动,那一亩三分地住的到底是华妃还是熹贵妃压根就没人管。也就是说,常量指针指向的地方不能改,但那块地方的值(华妃还是熹贵妃)可以改。

粗浅见解,如有不对的地方,欢迎各位大佬指正。

标签:第三者,const,常量,指向,情仇,C语言,我们,指针
From: https://blog.csdn.net/m0_62364527/article/details/136719302

相关文章

  • 实验1 c语言开发环境使用和数据类型、运算符、表达式
    task1`#include<stdio.h>intmain(){printf("o\n");printf("\n");printf("II\n");printf("o\n");printf("<H>\n");printf("II\n");return0;}``#include<stdio......
  • 实验1_C语言输入输出和简单程序编写
    task1_11#include<stdio.h>2#include<stdlib.h>3intmain()4{5printf("O\n");6printf("<H>\n");7printf("II\n");8printf("O\n");9printf("<H>\n");10p......
  • cpp:const引出的那些事
    1.常变量constinti=10;intconsti=10;两种表达方式没区别2.指针与const如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。利用英文从右边往左边读,并且以to为分界,to......
  • C语言:洛谷数组题目(2)(冰雹猜想,校门外的树,旗鼓相当的对手)
    目录1.前言2.三则题目1.冰雹猜想1.题目描述2.输入格式3.输出格式4.题解2.校门外的树1.题目描述2.输入格式3.输出格式4.题解3.旗鼓相当的对手1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言今天小蒟蒻继续为大家分享洛谷数组题单题解,一共三道题,希望大......
  • Qt "QWidget: Must construct a Qapplication before a Qwidget"错误
    问题该错误信息表示在创建QWidget(窗口部件)之前必须先创建QApplication(应用程序)。这是因为QApplication在创建QWidget之前会进行一些初始化操作,确保正确运行应用程序。要解决这个错误,您需要在创建QWidget之前先创建QApplication。以下是处理该错误的常见方法:1.在......
  • Qt 解决:QWidget: Must construct a QApplication before a QWidget
    在调试vlc-qt的examples工程时,遇到编译报错“QWidget:MustconstructaQApplicationbeforeaQWidget”根据字面理解应该是,创建窗体前应该必须先构造一个QApplication。网上很多人也遇到过这样的问题,也确实是这个原因,如下:但是本人遇到的问题却不是这个,最后查找......
  • 滴水逆向笔记系列-c语言总结6-20.多级指针 数组指针 函数指针-21.位运算-22.内存分配
    第二十课c语言13多级指针数组指针函数指针1.多级指针反汇编一二级指针可以看到p1==*(p1+0)==p1[0]本来一直没想懂为什么是movsxecx,byteptr[eax],是byte,才发现p1是char类型,所以才得用movsx拓展(p1+2)==p1[2],指针可以用和[]取值,他们是一样的(((p3+1)+2)+3)==p3[......
  • 深入C语言指针,使代码更加灵活(二)
    一、数组名的理解前面我们在使用指针访问数组内容的时候,有这样的代码:intarr[10]={1,2,3,4,5,6,7,8,9,10};int*p=&arr[0];在这里我们使用&arr[0]的方式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,而且是数组首元素的地址。我们来进行测试:#d......
  • 滴水逆向笔记系列-c语言总结4-15.switch语句反汇编-16.指针1-17.指针2
    第十五课c语言8switch语句初步测试感觉switch在反汇编的语句和if语句的唯一差别就是jcc语句比较集中当分支大于四条时,switch的反汇编开始变3为switch传入的值,1是case最小值,4是case最大值减1,算出偏移量后通过偏移量4加上基址就可以在大表中获取要输出的case语句的地址当现在case......
  • 滴水逆向笔记系列-c语言总结5-
    第十八课c语言11字符串与数组这一节课b站缺失了,参考一下大佬的笔记学习,链接:https://blog.csdn.net/Edimade/article/details/124446533?spm=1001.2014.3001.55021.字符数组:::infochararr[10]={'A','B','C','D','E','F'};//编译器默认在结尾添加......