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

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

**

一:常量

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

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
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
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);
}
编程小号
上一篇 2025-03-17 08:06
下一篇 2025-06-08 21:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/111039.html