C++指针笔记

一、指针的基本概念以及用法

  1. 一级指针的基本概念和基本用法

int a =10,b=20;
a和b此时存储在内存中
a与b储存在栈中

附:栈与堆

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:
(1)程序内存布局场景下,堆与栈表示两种内存管理方式;
(2)数据结构场景下,堆与栈表示两种常用的数据结构。
栈通常是一个预定义大小的内存区域,通常约为2兆字节左右
堆也是一个预定义了默认值的区域。但是它可以生长并随着应用程序的进行改变,重要的是要知道这两个内存区域的实际位置在我们的ram中是完全一样的
两者的工作原理非常不同,但本质上它们做的事情是差不多的
他们的不同之处在于,它如何为我们分配内存。

在这里插入图片描述

ab具体在哪里呢?&a,&b
此处可以用%d,无论用%x还是其它,本质上输出的都是同一个位置,只不过进制不同。在这里插入图片描述

指针即是地址,地址就是指针,指针是用来储存地址的
指针常量
那么能不能改变这个地址呢?,不能,因为&a&b这个地址是个常量,在程序运行的瞬间便给AB分配了地址,且每次运行它可能会不一样,因为每次运行时都会重新分配

  1. 二级指针的基本概念和基本用法

指针变量

怎么定义一个指针变量?:数据类型*名字;

int*p ,问:*到底是靠变量名还是靠类型; 都可以。
int * p1,p2,p3,p4,这里定义的只有p1为指针变量,其余为int变量;
int *p1,*p2,*p3……才是全部为指针变量,但此时的变量都未进行初始化,会被警告。指针变量在使用前一定要初始化或赋值,否则将不能使用(野指针 不知道指向哪里)。
指针变量与普通变量有什么区别? 指针变量与普通变量本质上没有区别。普通变量存储的是数值,但指针变量存储的是地址
在这里插入图片描述

在这里插入图片描述

如果不知道指向哪里则赋值为null(空指针);空指针为内存地址为0的地方;
*能够直接操作内存

  • :解引用,间接访问运算符,*后面可以跟一个指针,此指针既可以读取数值又可以改写数值
    指针指向谁,解引用便等价于谁。 *pa<=>a.
    我们所改变的不是物理内存,而是虚拟内存,每个windows应用程序都有4GB的虚拟内存空间在这里插入图片描述
    const int c = 30;//const表示常量
    c = 4000;
    printf(“c=%d\n”,c)

C可以改变吗?,不能。
在这里插入图片描述
但是可以用指针改变
在这里插入图片描述
关于数组指针偏移,如

int arr[10] ={1,2,3,4,5,6};
printf(“arr +1 = %d \n”,arr+1);

其位置偏移为这样

+1时加的是一个整数字节,所以在内存中它+1实际上是加了4个储存字节
如储存位置为:111000,则加完后为:111004

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值