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);
  }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TCP/IP三次握手与四次挥手学习笔记(二)

    TCP/IP三次握手与四次挥手学习笔记(二)

    2022年2月14日
    144
  • PyCharm入门教程——用户界面导览「建议收藏」

    PyCharm入门教程——用户界面导览「建议收藏」JetBrainsPyCharm是一种PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。通过这篇文章,您可以了解PyCharm用户界面是如何组织的,以帮助您在工作环境中找到自己的方式。当您第一次运行PyCharm或没有打开任何项目时,PyCharm将显示欢迎屏幕,允许快速…

    2022年8月28日
    4
  • cglib实现动态代理_cglib和jdk动态代理

    cglib实现动态代理_cglib和jdk动态代理一、前言  说到动态代理,开发者们第一时间想到的就是JDK动态代理和cglib动态代理。了解Spring的同学应该知道,SpringAOP功能的底层实现,就是使用的这两种动态代理。两者区别JDK的动态代理机制只能代理实现了接口的类,而没有实现接口的类就不能实现JDK的动态代理;cglib动态代理是针对类来实现代理的,它的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强。使用cglib实现动态代理,完全不受代理类必须实现接口的限制。cglib底层采用ASM字节码生成框架,使用字节码技术生

    2022年10月20日
    2
  • PhpStorm 配置 Xdebug调试工具

    PhpStorm 配置 Xdebug调试工具

    2021年10月31日
    54
  • Python实现五子棋人机对战[通俗易懂]

    Python实现五子棋人机对战[通俗易懂]本文转载自数据札记倌,详情可以扫描下方二维码:五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题。这篇文章主要介绍了python版本五子棋的实现代码,大家可以做个参考,与我的傻儿子对弈一下。简述虽然计算机已经几乎激活成功教程了五子棋的取胜秘籍,甚至给出了取胜的具体方案,然而,对人来说,五子棋还是非常有玩头的。我们往往有五子棋的技巧性和全局观远远比不上象棋,围棋之类的感觉:这个真不一定,先说技…

    2022年6月22日
    67
  • 多路复用_java多路复用

    多路复用_java多路复用1、说明socket编程的demo中使用的都是最基本的,但是一般不会真正用在项目中的代码。而实际项目中,需要面临复杂多变的需求环境,比如有多个socket连接,或者服务需要监听的时候,可能有很多so

    2022年8月3日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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