一、指针是什么
指针是编程语言中的一个对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的成为指针。意思是通过它能找到以它为地址的内存单元
那么通过地址能找到值,地址的内存单元是怎么产生的呢?
如果是32机器,通电之后会产生电信号,点信号有正电和负电,电信号找出数字信号之后,其实就是32个0 1 组成的二进制序列,那么32个01组成的二进制序列有多少种可能性?
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000002
… … …
11111111 11111111 11111111 11111111
这里就有232那么多的地址,这是32位机器上的,
在64位上更大
⚠️注意:
- 在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所 以一个指针变量的大小就应该是4个字节。
- 那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。
int a = 10; //这个a占4个字节
int* pa = &a; //拿到的是a的4个字节中第一个字节的地址
二、指针和指针类型
-
指针类型决定了指针解引用的权限有多大, 如果将一个int型指针的值传到char型指针里,但由于char型只能接受一个字节
上图中int型指针,p+1为跳过一个整型,也就是4个字节
而char型指针,pc+1跳过一个字符