指针基础总结详解

一、指针是什么

说到指针,有过基础的同学可能知道它就是内存地址,但为了更好的了解指针, 我们就要从计算机的内存说起。理解好指针的大前提就是理解好内存是什么。

1.内存

内存是计算机的一个非常核心的硬件设备,也是写程序时非常重要的资源。
我们可以这样理解:内存就是一个很长的酒店走廊,这个走廊由很多很多的房间构成,一个房间的大小就是8个比特位(1个字节),我们采取16进制的计数方式给每个房间都编一个门牌号,这个门牌号就是我们内存的地址,也就是指针,指针就是我们这里的门牌号
在这里插入图片描述我们经常用 G 来衡量内存大小,这里

一个G有10亿个字节

2.外存和内存

内存和外存都是用来存储数据的,但是CPU只能访问内存,细心的同学可能会发现在买电脑的时候一般都是有这样的选择:
在这里插入图片描述
这里的16G就是内存大小(内存条是加内存大小的),512G就是外存大小。(机械硬盘、固态硬盘都是外存)

内存和外存的区别:易失性不同、性能不同、存储时长不同、访问权限不同

3.指针

指针是个变量,存放内存单元的地址(编号)。
我们借助一个小代码来仔细讲解:

#include <stdio.h>
int main()
{
   
 int a = 10;//一个变量开辟四个房间
 int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。
   //将a的地址存放在p变量中,p就是一个之指针变量。
 return 0;
}

4.二级指针

呢么既然指针是一个变量,呢指针的地址又存在哪里呢?

在二级指针中,二级指针的变量存在三级指针中,这是一个无限循环…
在这里插入图片描述

这种多重指针一般用不到的,所以了解就可以。要是遇到的话可以用typedef(改个别名)来简化。

5.总结

指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)
既然地址是变量,呢也有内存中的大小,呢么

在32位操作系统下,一个指针变量的大小是4字节.
在64位操作系统下,一个指针变量的大小是8字节.

二、指针和指针类型

1.指针的类型和定义方式

指针也是变量,变量有不同的类型,整形,浮点型等。那指针有没有类
型呢? 准确的说:有的。
我们用如下的方式表示指针类型:

char  *pc = NULL;
int   *pi = NULL;
short *ps = NULL;
long  *pl = NULL;
float *pf = NULL;
double *pd = NULL;

不同的指针类型代表了它所指向的呢一片内存空间的大小。

int* 、char* 、short*类似的带有 * 的就是我们的指针的数据类型。
在32位操作系统下,一个指针变量的大小是4字节.
在64位操作系统下,一个指针变量的大小是8字节.

所以要注意指针类型他们本身的大小是固定的。
这里一定要区分指针所指向的内存空间和他自己所处的内存空间
在这里插入图片描述

2.指针类型的意义

既然是固定的大小,呢int* 、char* 、short*的其他意义是什么呢?

2.1解引用的大小权限

指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

#include<stdio.h>
#include<stdlib.h>
int main()
{
   
 int n = 0x11223344;
 char *pc = (char *)&n;
 int *pi = &n;
 *pc = 0;   //重点在调试的过程中观察内存的变化。
 *pi = 0;   //重点在调试的过程中观察内存的变化。
 system("pause");
 return 0;
}

2.2指针一次访问的范围

指针的类型决定了指针向前或者向后走一步的距离。(比如:int类型+1地址向前四个字节,char类型+1地址向前1个字节)

#include<stdio.h>
#include<stdlib.h>
int main()
{
   
	int n = 10;
	char* pc = (char*)&n;
	int* pi = &n;
	
  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值