前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++常量指针和指针常量_指针指向二维数组

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

作者头像
全栈程序员站长
发布2022-09-27 11:06:59
7270
发布2022-09-27 11:06:59
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

**

一:常量

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

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

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

代码语言:javascript
复制
 Const int a=250;//将变量a常量化
 A=200;//gcc编译器报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

不能改指针指向的内容,可以改指针的地址
不能改指针指向的内容,可以改指针的地址
代码语言:javascript
复制
例如 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)指针常量(不太用) 指针永远指向一块内存区域,不能再指向别的内存,但是可以修改指针内存的值

代码语言:javascript
复制
例如:
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 *

**

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

经典指针操作案列

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

4个字节,十六进制每两个数字是一个字节,左是高字节,右是低字节

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

**

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

** 操作方式: 方式1:采用有数据类型指针来获取1字节,2字节(可复制 代码在后面)

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

方式2:采用无类型指针void*来获取1字节,2字节,4字节(可复制的代码在后面)

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

两种方式代码如下: 方式1代码

代码语言:javascript
复制
  #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代码

代码语言:javascript
复制
#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.cn/179185.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:常量
  • 二、无数据类型指针:void *
  • 如何做到操作访问4字节中的 某1个字节或者某2个字节数据呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档