首页 > 代码库 > 指针简述
指针简述
间接访问:通过内存单元编号((地址),以及数据所占字节数访问内存中的数据.
主要内容:指针变量指针与数组,指针与字符串
数据的存储:
其中字节是最小的存储单元,一个字节称为一个存储单元(内存单元),不同数据类型所占的存储空间不等
为了正确的访问内存单元,每个内存单元都有一个编号.内存单元的编号称为地址
内存单元的数据是今天得重点内容
访问方式:
直接访问和间接访问
直接访问:
直接访问内存空间的内容 例如 :a = 20;b = 2 * a;
间接访问:
通过内存单元编号以及数据所占字节数访问内存中的数据
间接访问在程序中随处可见,指针是间接访问的常用方式.
1.指针:
指针是内存中的数据的内存编号
程序中的每个数据都有地址
通过&符号取变量的地址,例如:a = 20; printf(“%p”, &a);//打印内存地址
指针变量
指针变量是C语言中存放内存编号的量.
指针变量的定义:
int *p =NULL;//NULL恒等于0
与普通变量不同的是.定义指针变量的时候.前面需要加*
指针变量的类型修饰符表示:该指针变量保存的指针对应的存储区域是一个整形(或者其他类型)的存储区域.这里指针变量有别于普通变量所以变量名前加一个*来区分
使用*操作符,访问内存编号里面对应的内容
int a = 5;
int *p = NULL;
p = &a;
printf(“%d”, *p);
指针变量是存放数组的变量
*和&配套使用
*是取值运算符,可以通过*+变量名的形式访问指针变量存储的指针对应的存储空间的内容
&p 指针p本身的地址
指针的重指向
int a = 3, b = 5;
int *p = &a;
p = &b;
*p = 5;
//指针变量的赋值意味着重指向
指针变量的重指向,本身就是对指针变量做重新赋值的操作,因为指针变量并不脱离变量的范畴,在程序序运行期间可以对一个已经定义的指针变量做重新赋值,让它保存另一个存储空间的地址,这时候之前所做保存的地址就会被覆盖掉
2.指针的类型
指针变量是存放内存地址的变量
因为内存地址只跟操作系统有关,所以指针变量所占的内存大小取决于操作系统位数(32位系统指针占四个字节)
不同类型的指针区别:主要作用 指针自增运算,指针移动字节数多少,以及用*取值时,取多少字节数据.
注意事项:
int *p = NULL;此时的*只起到修饰的作用,告诉编译器,p是个指针.
数组
在C语言中,数组是构造类型,系统会分配一段连续空间来存储数组的全部数据,数组名代表数组元素的首地址(第一个元素的内存地址)
3.指针与数组
.指针可以当数组名使用
p[1] = 3;
恒等于 a[1];
恒等于*(p + 1);
恒等于*(a + 1);
(1)所占空间不同
指针所占空间至于操作系统位数有关
数组所占空间与元素个数有关,数据类型有关
(2)数组名是常量地址
数组名不能重指向(不能赋值)
指针可以重定向
4.指针与字符串
C语言用字符数组保存字符串;
指针数组
存放指针的数组称为指针数组.
注意可以通过指针来修改字符数组,但不可以修改常量字符串.<span style="font-size:18px;">
</span></span></h2>
指针简述