本文已参与[新人创作礼]活动,一起开启掘金创作之路
指针(pointer)相信一直是初学cpp所遇到的比较头疼的知识点,但是又相当重要,始终贯穿整个cpp,所以今天先以此进行梳理。
在介绍指针之前先简单介绍一下内存,因为数据都是存在内存单元中的。
在计算机中内存就是内存IC,不过从程序员角度就如同楼房以及房间号,指针就是房间钥匙或者房间门牌号,比如904可以理解成9层的4号房间等等。
不过程序中存放数据的内存基本会有四块;
- 全局区(静态区) 存储全局变量和静态变量,程序结束时,系统会释放这块资源。
- 栈区 存放函数的参数值,局部变量的值,进入作用域分配内存,离开后释放。由编译器自动分配释放。
- 堆区 有程序员分配释放,如果程序员不释放,程序结束时可能有系统回收,会产生内存泄露,
- 代码区 存放CPU执行的机器指令 1、指针的定义 是一个变量,其值是另一个变量的地址。每个变量都有一个内存地址,可以使用&访问该地址。
| 指针 | 说明 |
|---|---|
| 空指针 | 定义的零值常量 |
| 指针运算 | ++、--、+、- |
| 指针与数组 | 指针跟数组有着密切关系 |
| 指针数组 | 定义数组保存多个指针 |
| 指向指针的指针 | 在指针上使用指针 |
| 将指针传递给函数 | 通过引用或通过地址传递函数都允许被调用函数在点调用函数中更改传递的参数 |
| 函数返回指针 | 函数返回指向局部变量、静态变量和动态分配的内存指针 |
2、详解
#include <stdio.h>
int main(void)
{
char c = 'A';
int a = 100;
printf("a = %d\n",a);//输出变量a的值
printf("&a = %x\n",&a);//输出变量a的地址
printf("c = %c\n",c);
printf("&c = %x\n",&c);
return 0;
}
输出:
a = 100
&a = 12ff40
c = A
&c = 12ff44
int *ptr = nullptr;//定义一个整型指针变量空ptr,指向类型为int的整型变量; int a = 100; ptr = &a;//ptr指向a的
*ptr = 50;//此时等价于a = 50,间接访问a的对应空间
//TODO