指针的基本语句
一、指针是什么
说到指针,有过基础的同学可能知道它就是内存地址,但为了更好的了解指针, 我们就要从计算机的内存说起。理解好指针的大前提就是理解好内存是什么。
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;