c++常量指针和指针常量_指针指向二维数组

c++常量指针和指针常量_指针指向二维数组**一:常量**常量指针,指针常量,常量指针常量a)常量定义:不可修改的值,例如250,’A’b)const关键字功能:将变量常量化,四种形式(1)const可以修饰普通变量,一旦修饰该变量,该变量就当做常量看待,不可再更改Constinta=250;//将变量a常量化A=200;//gcc编译器报错(2)常量指针:不能通过指针变量来修改指向的内存区域的数据,主要…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

**

一:常量

**
常量指针,指针常量,常量指针常量

a)常量定义:不可修改的值,例如250,’A’
b)const关键字功能:将变量常量化,四种形式

(1)const可以修饰普通变量,一旦修饰该变量,该变量就当做常量看待,不可再更改

 Const int a=250;//将变量a常量化
 A=200;//gcc编译器报错

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)常量指针:不能通过指针变量来修改指向的内存区域的数据,主要目的是保护数据不可篡改
不能改指针指向的内容,可以改指针的地址

例如 int a=250;
	 Const int *pa=&a;//定义初始化一个常量指针
	 
或者 int a=250;
Int const *pa=&a; //定义初始化一个常量指针

*pa=200;//gcc编译报错
Printf(“a=%d\n”,*pa);//可以查看


int b=300;
 pa=&b;//pa重新指向b变量,可以修改指针变量本身保存的地址
*pa=400;//gcc编译报错

在这里插入图片描述

(3)指针常量(不太用)
指针永远指向一块内存区域,不能再指向别的内存,但是可以修改指针内存的值

例如:
int a=100;
int *  const  pa=&a;//定义指针常量
*pa=300;//可以
printf("a=%d\n",*pa);
int b=200;
*pa=&b;//不可以,gcc报错	
printf("a=%d\n",*pa);	

(4)常量指针常量:指针本身和指向的内容都不可修改
在这里插入图片描述

**

二、无数据类型指针:void *

**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经典指针操作案列

int a=0x12345678;
int *p=&a;
printf("%#x\n",*p);//获取4个字节数据并且按照十六进制打印输出

4个字节,十六进制每两个数字是一个字节,左是高字节,右是低字节
在这里插入图片描述

**

如何做到操作访问4字节中的 某1个字节或者某2个字节数据呢?

**
操作方式:
方式1:采用有数据类型指针来获取1字节,2字节(可复制 代码在后面)
在这里插入图片描述
在这里插入图片描述
方式2:采用无类型指针void*来获取1字节,2字节,4字节(可复制的代码在后面)
在这里插入图片描述
在这里插入图片描述
两种方式代码如下:
方式1代码

  #include<stdio.h>
  int main()
  {
      int  a=0x12345678;
      //1、一次性获取4字节数据
      int *p=&a;
      printf("a=%#x\n",*p);//一次性获取全部四字节数据
      printf("**************\n");
  //利用有数据类型指针来获取1字节,2字节数据
  //2、获取一字节数据
  char *p1=(char *)&a;//将a的int型指针强制转化为char类型的指针
  printf("a=%#x\n",*p1++);//0x78
  printf("a=%#x\n",*p1++);//0x56
  printf("a=%#x\n",*p1++);//0x34
  printf("a=%#x\n",*p1++);//0x12
  printf("**************\n");
  //3、获取2字节
  short *p2=(short *)&a;//将a的int型指针强制转化为short类型的指针
  printf("a=%#x\n",*p2++);//0x5678
  printf("a=%#x\n",*p2++);//0x1234
}

方式2代码

#include<stdio.h>
int main()
{
    int b=0x12345678;
    void *p3=&b;
    //1、获取1字节数据
    char *p4=(char  *)p3;
    printf("%#x\n",*p4++);//打印方式1
    printf("%#x\n",*p4++);
    printf("%#x\n",*p4++);
    printf("%#x\n",*p4++);
    printf("%#x\n",*(char *)(p3+0));//打印方式2(也可以直接强转)
    printf("%#x\n",*(char *)(p3+1));
    printf("%#x\n",*(char *)(p3+2));
    printf("%#x\n",*(char *)(p3+3));
    printf("************************\n");
    //2、获取两字节
    short *p5=(short *)p3;
    printf("%#x\n",*p5++);
    printf("%#x\n",*p5++);
    printf("%#x\n",*(short *)(p3+0));
    printf("%#x\n",*(short *)(p3+2));
    printf("************************\n");
    //3、获取字节
    int *p6=(int *)p3;
    printf("%#x\n",*p6);
    printf("%#x\n",*(int *)p3);
  }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179185.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • qmake 教程

    qmake 教程qmake的介绍qmake的介绍qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的“项目”文件并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来

  • 数学速算法_三年级数学时分秒换算口诀+精选思维奥数题整理汇总[通俗易懂]

    数学速算法_三年级数学时分秒换算口诀+精选思维奥数题整理汇总[通俗易懂]文末有打印方法时间单位换算口诀1世纪=100年1年=12月大月(31天)有:1月,3月,5月,7月,8月,10月,12月小月(30天)的有:4月,6月,9月,11月平年2月28天,闰年2月29天平年全年365天,闰年全年366天1日=24小时1时=60分1分=60秒1时=3600秒时间之间的进率都是601时=60分1分=60秒…

  • uml用例图详解_uml模型图

    uml用例图详解_uml模型图用例图的含义由参与者(Actor)、用例(UseCase)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。其中用例和参与者之间的对应关系又叫做通讯关联(CommunicationAssociation)。用例图的作用用例图是需求分析中的产物,主要作用是描述参与者与和用例之间的关系,帮助开发人员可视化地了解系统的功能。借助于用例图,系统用户、系统分析人员、系统设计人员、领…

  • pytest重试_手机qq插件加载失败

    pytest重试_手机qq插件加载失败安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

  • python从linux下载文件_python gzip

    python从linux下载文件_python gzip解决python调用OpenCV保存视频时使用”avc1″格式出现#Couldnotfindencoderforcodecid27:Encodernotfound的错误(此错误不能保存视频文件),以及使用”mpeg”格式出现的#OpenCV:FFMPEG:tag0x6765706d/’mpeg’isnotsupportedwithcodecid2a…

  • SIFT–尺度空间、高斯金字塔

    SIFT–尺度空间、高斯金字塔尺度空间高斯金字塔高斯模糊下采样高斯金字塔的构造过程差分高斯金字塔构造过程SIFT成名已久,但理解起来还是很难的,一在原作者Lowe的论文对细节提到的非常少,二在虽然网上有许多相应博文,但这些博文云里雾里,非常头疼,在查看了许多资料了,下面贴出我自己的一些理解,希望有所帮助。Lowe把SIFT分为四个阶段:构建尺度空间、关键点的定位、方向分配、特征描述符。下面分别从这四个阶段来阐述。尺度空

    2022年10月14日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号