C++指针知识点浅析

指针是一种特殊的变量,他可以指向数据的内存地址,并且可以通过解引用的方式修改内存地址所对应的数据。通过 & 取值符可以获得数据对应的地址,通过 * 对指针解引用可以修改地址对应的数据。

	int a = 10;
	int *p;
	p = &a;//&取值符,访问值对应的内存	int *p = &a。
	cout << "解引用前 a = " << a << "  a的地址为 &a = " << &a << endl;
	cout << "指针指向的地址 p = " << p << "  指针地址对应的数据为 *p = " << *p << endl;
	
	*p = 20;//*指针解引用,间接修改内存对应的值。
	cout << "解引用后 a = " << a << "  a的地址为 &a = " << &a << endl;
	cout << "指针的字节大小为 " << sizeof(int *) << endl;//指针的内存空间在32位系统下是占4个字节,64位系统下占8个字节。
  • 空指针:
    空指针通常用于初始化指针变量,但空指针指向的内存空间是不可访问的。
	int *nullP = NULL;//初始化指针
	//cout << *nullP;//空指针指向的内存空间不可访问,因此会报错。
  • 野指针:
    指针变量指向非法的内存空间,因此也不可访问。
	int *wildeP = (int *)0x1100;//0x1100这个内存不是我们申请的,无权访问并修改。wildeP就是野指针。
	//cout << *wildeP;//无权限访问。

可以发现空指针和野指针指向的内存空间都不是由我们申请的,因此我们是无法通过指针来访问这些内存空间的。

  • const修饰指针:

① const修饰指针:const int *p,常量指针。指针的指向地址可变,指向的值不可通过指针修改。

	int a = 10;
	int b = 20;
	const int *P = &a;//指针默认指向 a 的地址
	P = &b;//正确的,指针由指向 a 的地址变成指向 b 的地址。
	//*P = 15;//错误的,常量指针指向的值不可通过指针修改。指向的是10就是10。

② const修饰常量:int * const p,指针常量。指针指向的地址不可变,指向的值可以通过指针修改。

	int a = 10;
	int b = 20;
	int * const P = &a;
	*P = 15;//正确的,指向的值可变,从10->15。
	//P = &b;//错误的,指向的地址不可变。

③ const即修饰指针,又修饰常量:const int * const P,指针指向的地址和指向的值都不可变。

	int a = 10;
	int b = 20;
	const int * const P = &a;
	*P =15;//错误。
	P = &b;//错误。

int * P;
P是指针指向的地址,* 是指针指向的值。const根据就近原则修饰离自己最近的那个,被修饰就不可更改。

  • 指针与数组:
    数组名就是数组的首地址,通过让指针向后偏移遍历数组。
	//通过指针访问数组中的元素。
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int *p1 = arr;//创建指针为数组的数组名。数组名就是数组的首地址。
	cout << "利用指针遍历数组" << endl;
	for (int i = 0; i < 10; i++)
	{
		cout << *p1 << endl;//解引用得到地址对应的数。
		p1++;//指针向后偏移4个字节,就得到第二元素的地址。因为整型占4个字节。
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值