C++笔记:指针(1)

1. 定义

C/C++提供了让我们直接操作内存的机会,这种机会就是利用指针,指针要有两个要素:

  1. 要操作的内存地址;
  2. 要操作的内存大小。

2. 指针的语法

2.1. 声明方式一

数据类型* 变量名称;

int* a{};
2.2. 声明方式二

数据类型 *变量名称;

int *b{};
2.3. 注意点
int* a,b; // a是指针,b是int类型的数据
//希望a,b都是指针,可如下声明
int *a, *b;

3. 运算符

3.1. 取址运算符&

既然指针是用来操作内存的,那如何获取一个变量的内存地址呢?
利用取址运算符&

int a = 100;
int *p = &a;

此时,p就是a的内存地址。

3.2. 间接运算符*

如何读写一个指针指向的内存空间 ?
利用间接运算符*

int a = 5000;
int *p = &a;
*p = 500;

*p = 500;就代表在a的内存地址里写入500。

3.3. 综合
int a = 5000;
int *p = &a;
*p = 100;
std::cout << "内存地址 p= " << p <<"\n *p = "<< *p << "\n a= " << a;

//    p = 006FF81C
//   *p = 100;
//    a = 100;


4. 指针数组

指针的本质其实就是一种特殊的变量类型,因此指针也可以通过数组的方式声明。

int* pArray[10];

5. 指针的大小

int a{100};
int *p {&a}; 
std::cout << sizeof(p)<<std::endl; //4 
char *cp{};
std::cout << sizeof(cp)<<std::endl; //4
  1. 在32位操作系统下,指针的寻址最大范围是2^32, 即4GB ,即0xFF FF FF FF;0xFF为1个字节,所以,32位操作系统的指针,4字节即可满足寻址要求。
  2. 同上,64位操作系统下,指针的大小为8字节

6. 指针的运算

6.1 实验一
	int a[]{1001, 2001, 3001, 4001};
	int* ptr{ &a[0] };
	std::cout << (*ptr)++ << std::endl; 	//1001   (*ptr) 即 a[0] 的值,先打印(*ptr),再做 ++ 运算
	std::cout << a[0] << std::endl; 	    //1002
6.2. 实验二
	int a[]{ 1001, 2001, 3001, 4001 };
	int* ptr{ &a[0] };

	std::cout << ptr << std::endl;         // 00F9FA50

	std::cout << *ptr++ << std::endl;      // 1001    先显示*ptr的值,然后让ptr++
	std::cout << a[0] << std::endl;        // 1001

	std::cout << ptr << std::endl;         // 00F9FA54    指针 + 1,就是 “指针 + 指针类型的大小”(本例就是 int类型的指针 ,4个字节)
	std::cout << &a[1] << std::endl;       // 00F9FA54

	std::cout << *ptr << std::endl;        //2001
6.3. 实验三
    int a[]{ 1001, 2001, 3001, 4001 };
	
	int* ptr{ &a[0] };

	int** pptr{&ptr};
	
	*pptr = &a[1];

	std::cout << *ptr << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值