指针

本文详细介绍了指针的概念,包括指针变量的定义、指针的大小、野指针和空指针的区别,以及const修饰指针的用法。还探讨了指针与数组的关系,强调了避免野指针的重要性,并提到了void指针作为万能指针的使用场景。此外,文章还总结了const修饰符的规则及其在函数参数中的应用。
摘要由CSDN通过智能技术生成

指针变量的定义和使用

指针:数据在内存中的地址。
指针变量:存储内存地址的变量。

定义指针变量

定义指针变量和普通变量定义类似,需在变量名前面加星号*,格式为:

datatype *name;
datatype *name = value;

注意:*表示这是一个指针变量,datatype表示 该指针变量 所指向的数据的类型

任意指针类型大小:
指针的大小与类型 无关,只与当前使用的平台架构有关。
32位:4字节;
64位:8字节

野指针

1)没有一个有效地址空间的指针。
int *p;
*p = 1000;
2) p变量有一个值,但该值不是可访问的内存区域。
int *p = 10;
*p = 1000;

【杜绝野指针】

空指针

int *p = NULL;
// *p 时 p所对应的存储空间一定是一个 无效的访问区域

万能指针/泛型指针(void *)

可以接收任意一种变量地址。但在使用必须借助强转具体化数据类型。

int a = 32, b;
void *p;	// 万能指针。若要使用,需要将其类型具体化
p = &a;
b = *((int *)p);

const

const修饰变量:
	const int a = 20;
	//a = 30;	//不能修改
	int *p = &a;
	*p = 650;	//------> a = 650

const修饰指针:
	const int* p;	//可以修改p变量的值, 不可以修改*p
	int const *p;	//同上。可以修改p变量的值,不可以修改*p
	int* const p;	//可以修改*p的值,不可以修改p变量的值
	const int* const p;	//既不可以修改p,也不可以修改*p

总结:const向右修饰,被修饰的部分即为只读
常用:在函数形参内,用来限制指针所对应的内存空间为只读

指针和数组

数组名:
	【数组名是地址“常量”】----> 不可以被赋值
	指针是变量,可以用数组名给指针变量赋值。

取数组元素:
	int arr[] = {1, 2, 3};
	int *p = arr;
	arr[0] == *(arr+0) == p[0] == *(p+0)

指针和数组的区别:
	1. 指针是变量,数组名为常量。
	2. sizeof(指针) ===>> 4/8
	3. sizeof(数组) ===>> 数组的实际字节数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值