前言
指针是C语言中比较难的一部分,大部分同学对于此部分容易产生“畏难情结”,但是学习好这部分对C语言的深入很大的帮助,所以此篇主要以讲解指针基础为主。
指针概念
变量创建的本质就是在内存中申请空间,找到这个变量就需要地址。
内存单元编号==地址==指针
简单来说指针就是地址。
如何表示一个指针变量
首先必须要先了解两个操作符
“&”——取地址操作符
比如&a,就是取出变量a的地址。
“*”——解引用操作符操作符
“*”操作符在使用时与“[]”操作符类似,“[]”在定义一个数组时是表示数组大小,在后面使用时表示下标,而“*”定义时表示这是一个指针,在后面使用时就是解引用了
比如int a=20; int* p=&a;——定义,p中存放的是a的地址。
*p=10;——表示将p中的地址解引用,将p中存放的地址的对象赋值为10。
指针变量的大小
在定义一个指针变量时我们总是要把指针的类型定义为指针指向的对象的类型。
那么指针的大小是否就是指针的类型的大小呢?答案是否定的,指针类型的大小只与平台有关。
32位计算机上有32根地址总线——32/8——4byte
x86是32位平台
64位计算机上有64根地址总线——64/8——8byte
指针类型的意义
前面说到指针的大小与类型的关系无关,那么指针类型的存在的意义是什么呢?
指针类型决定解引用时有多大权限,向前向后访问时跳过多大距离。
类型为int型
类型为char型
void指针
void指针可以用来接收任意类型的地址,但是它无法进行指针运算(指针的加减整数和解引用操作)
Respect!