再学C++之指针的使用

本文详细讲解了指针的概念,包括如何定义和使用指针、不同类型的指针占用内存大小、空指针和野指针的区别,以及const修饰指针的特性。通过实例探讨了指针与数组、函数的关系,并展示了指针在数组操作和函数参数传递中的应用。
摘要由CSDN通过智能技术生成

1、指针的定义和使用

指针的作用:可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般都用16进制的数字表示
  • 可以利用指针变量保存地址
    *指针变量定义语法:数据类型 变量名;
int a=10;
int *p;//定义一个指针变量
p=&a;//给指针变量赋值
*p;//解引用,找到指针所指向的内存

2、指针所占的内存空间

说明:在32操作系统下,占4个字节;在64位操作系统,占8个字节

    cout << "int *所占的字节:" << sizeof(int*) << endl;
	cout << "float *所占的字节:" << sizeof(float*) << endl;
	cout << "double *所占的字节:" << sizeof(double*) << endl;
	cout << "char *所占的字节:" << sizeof(char*) << endl;
  • 32操作系统

在这里插入图片描述

  • 64位操作系统
    在这里插入图片描述

3、空指针

  • 空指针:指针变量指向内存编号位0的空间
  • 用途:初始化指针变量
  • 空指针指向的内存是不可以访问的
    int* p = NULL;
	*p = 100;
	cout << p << endl;//0000000000000000
	cout << &p << endl;//00000023C393F948
	cout << *p << endl;

在这里插入图片描述

4、野指针

野指针:指针指向非法的内存空间

    int* p =(int*) 0x0011;//自己指定一段内存
	*p = 100;//修改野指针会报错
	cout << *p << endl;//访问野指针会报错

在这里插入图片描述

5、const修饰的指针

  • const修饰的指针:常量指针
    特点: 指针的指向可以更改,指针的值不可以更改
    int a = 10;
	int b = 20;
	const int* p = &a;
    p = &b;
	//*p = 20;//报错
  • const修饰的变量
    特点: 指针的指向不可以更改,指针的值可以更改
    int* const p = &a;
	*p = 20;
	//p = &b;//报错
  • const即修饰指针又修饰变量

特点: 指针的指向不可以更改,指针的值不可以更改

    const int* const p = &a;
	p = &b;//报错
	*p = 100;//报错

6、指针和数组

作用:利用指针访问数组元素

    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int len = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < len; i++)
	{
		cout << *p << endl;
		p++;
	}

在这里插入图片描述

7、指针和函数

作用:利用指针作为函数参数,修改实参

void swap(int* a, int* b)//函数的设计
{
	int temp = *a;
	*a = *b;
	*b=temp;
	
}

	int a = 10;
	int b = 20;
	swap(&a, &b);//函数的调用
	cout << "实参中的a=" << a << endl;
	cout << "实参中的b=" << b << endl;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值