void指针和const修饰符

void指针

  • void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让改变量指向任何数据类型的变量。
  • 一般形式为:void *<指针变量名称>;
    对于void指针,在没有强制转换类型之前,不能进行任何指针的算术运算。
编程练习
#include<stdio.h>
int main()
{	
	int m = 10;
	double n = 3.14;
	void * p,*q;
	//赋值给void *类型指针前需要强制转换转换为void *类型
	p = (void *) &m;
	//打印数据时需要将void *类型指针按照所打印数据的类型进行相对应的强制转换
	printf("%d %d\n",m,*(int *)p);
	q = (void *)&n;
	printf("%.2f %.2f\n",n,*(double *)q);
	return 0;
}

运行结果:

10 10
3.14 3.14

例:使用void指针遍历以为数组

#include<stdio.h>
int main()
{	
	int arr[] = {1,2,3,4,5,6};
	void * p;
	int  i ,n;
	p = arr;
	n = sizeof(arr)/sizeof(int);
	for(i = 0;i < n;i++)
	{
		printf("%d",*((int *)p + i));
	 }
	puts("");
	return 0;
}

运行结果:

123456
const变量

常量化变量的值
一般形式说明:

  1. const <数据类型>变量名 = [<表达式>];
  2. 常量化变量时为了使得变量的值不能修改
  3. 变量由const修饰时,若想用指针间接访问变量,指针也要有const修饰。const可以放在指针声明两边,但用法不同
const修饰指针

常量化指针目标表达式

  • 一般说明形式如下:
    const<数据类型>*<指针变量名称>[=<指针运算表达式>];
    常量化指针目标时限制通过指针改变其目标的数值,但<指针变量>存储的地址值可以修改。

常量化指针变量
一般说明形式如下:
<数据类型>*const<指针变量名称>[=<指针运算表达式>];
使得<指针变量>存储地址值不能改变,但可以通过 * <指针变量名称>可以修改指针所指向变量的数值

总结一句话就是:const修饰谁,谁不能变。
例:

#include<stdio.h>
int main()
{	
	int a = 6;
	const int * p;
	int *const q;
	p = &a;
	//(*p)++;  会报错,const int 修饰的是指针变量p的目标是const型常量
	//q = &a;  同样会报错,const修饰的是指针变量q地址是const类型的常量,地址值不能改变
	*q = 10;
	return 0;
}

常量化指针变量及目标表达式
一般说明形式:

  • const<数据类型>*const<指针变量名> = <指针运算表达式>;
  • 常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中,如果你想将一个 `const void*` 指针转换为可以通过下标访问的数组,需要进行以下几个步骤: 1. 将 `const void*` 指针转换为 `const char*` 指针,这是因为 `char` 类型的大小为 1 字节,而 `void` 类型没有大小。因此,可以将 `void` 类型的指针转换为 `char` 类型的指针,这样可以通过指针运算访问内存中的数据。 2. 将 `const char*` 指针转换为 `const T*` 指针,其中 `T` 是你要访问的数据类型。这里使用了 `reinterpret_cast` 进行类型转换。需要注意的是,这里使用 `reinterpret_cast` 是因为我们要将一个 `char` 类型的数据强制转换为 `T` 类型的数据,这是一种非常危险的操作,需要确保转换后的指针指向的内存区域是合法的。 3. 通过指针运算访问数组中的元素,可以使用下标运算符 `[]` 或者指针算术运算符 `+`。 下面是一个示例代码: ```cpp const void* my_void_ptr = /* ... */; // 将 void 指针转换为 char 指针,这样可以通过指针访问内存中的数据 const char* my_char_ptr = static_cast<const char*>(my_void_ptr); // 将 char 指针转换为任意类型的指针,这样可以使用下标访问数组 const int* my_int_array = reinterpret_cast<const int*>(my_char_ptr); // 访问数组中的第 i 个元素 int i = /* ... */; int my_int = my_int_array[i]; ``` 需要注意的是,这里使用了 `const` 修饰符,表示访问的是一个常量数组,不能修改其值。如果你需要修改数组中的值,可以将 `const` 关键字去掉。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值