指针基础(三)-- 指针常量与常量指针

1 指针常量与常量指针

const关键字修饰指针变量会根据修饰的目标不同导致两种结果

1.1 指针常量

const修饰的是指针p

指针的指向不能修改,即该指针变量中保存的内容不可改。

p不能修改,*p可以修改

语法格式:

基类型* const 指针变量名

int main()
{
	/*
	const int a = 100;//只读变量,无法直接被修改
	a = 19;
	*/
	int b = 88;
	int c = 101;
	//指针常量
	int* const p = &b;//只读变量,无法直接被修改,p本身不可修改,p的指向不能变
	*p = 99;
	printf("%d\n", b);

	//p = &c;
	return 0;
}

1.2 常量指针

const修饰的是*p

指针的指向可以修改,即指针变量中保存的值可以改,但是指针所指向的空间中的内容是不可以改的

p可以修改,*p不能修改

语法

const 基类型* 指针变量名;

基类型 const * 指针变量名;

int main()
{
	int a = 1;
	int b = 2;

	//const int* p = &a;
	int const* p = &a;
	p = &b;
	*p = 9;//*p的数据类型是const int类型,p本身是可以随便指向,*p是不可直接修改的

	return 0;
}

1.3常量指针常量

const既修饰p也修饰*p

指针的指向不可以修改,即指针变量中保存的值不可以改,同时指针所指向的空间中的内容也不可以改变

p不可以修改,*p也  不能修改

语法

const 基类型* const 指针变量名;

基类型 const * const 指针变量名;

2 void指针

2.1 void通常出现在函数的返回值类型声明。是指函数不需要返回,其次就是函数不需要接收参数时,形式参数列表可以用void填充int fun(void);

void类型也可以作为指针的基类型,目的是适配所有数据类型,因为void本身就是适配所有数据类型的意思,一个void类型的变量是无法声明的,因为void代表无类型。

因此使用void来充当指针变量的基类型,就可以让这个指针变量来存储任意变量的地址。我们也称这种类型的指针变量为“泛类型指针”

优点:可以接收任意变量的地址,也可以充当函数参数接收任意变量的地址;可以转换成任意基类型的指针类型,参与运算

综上所述:基类型是void的指针变量可以接收任意格式的地址,当使用void类型的指针变量时需要强制类型转换成其他具体的数据类型。否则会出风险。

3 指针变量充当函数形式参数

实际上就是将地址传递给形式参数,此时函数中的形式参数的这个指针也就指向了实际参数所在的空间,所以就可以通过形式参数来间接的修改实际参数的值

 数组传参

 函数的参数传递过程中,如果想要将数组当做参数传递给函数,编译器是无法实现的。因为数组空间比较大,如果要实现将整个数组进行参数传递,则需要耗费大量的空间由主调函数复制一个数组的备份交给被调函数。因此编译器并不会采取将整个数组进行传递的过程;而是将数组的首地址进行传递。

函数的调用时,如果要使用数组进行参数的传递,实际参数填入数组名(数组首地址),形式参数需要写一个指针,用于接收实际参数。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值