指针与数组【重学C之五】

来源:互联网 发布:台州永信网络卢良坚 编辑:程序博客网 时间:2024/06/09 19:52

指针与数组是C语言中两种常见的变量,指针用来保存变量地址,数组是用来保存同一种数据类型的,可以是基本变量类型,比如整形,浮点型等等,也可以是自定义变量类型,比如说结构体。

指针

首先指针提供了一种访问变量地址的方式,正是由于指针的存在使得C语言成为一种比较底层的语言,因为他可以直接操作系统的内存空间,通过其地址的方式,一般的高级语言都不会提供对地址直接操作的能力,比如说Java或者是Python,它们都没有直接控制内存空间的能力。要理解指针,先要明白,内存在电脑内是如何组织的。一般来说存储单元在计算机内是编址的,CPU通过内存的地址来访问内存中的数据,这些存储单元可以单个进行操作,也可以将地址连续的一系列单元在一起操作,一般来说CPU访问一次内存最少读取一字节的数据,也就是8位。指针中地址所对应的值可以通过&运算符来获取。一般来说,指针的声明应该要和它说对应变量类型一致,但是如果提前无法预知的类型,可以通过使用void *来声明,在使用的时候在转换为对应的变量类型。

(*ip)++

像这样的语句,括号必须加,因为他们都是一元运算符,遵循重右往左的结合顺序。

指针常常作为函数的参数传入到函数中,这是因为在C语言中,函数参数的传递是通过传值的方式实现的,真正的变量并没有被传入到函数中,而是在被传入函数中创建一个参数对应变量的拷贝,因此对参数变量的修改不会影响传入的值,那么现在的问题就是如果确实是想要在函数中对相应变量进行修改那么应该如何操作呢,通过传变量指针的方式来实现。将变量地址的拷贝传入函数中,通过函数的地址通用可以实现对函数变量的修改。但是如果传入的指针不想被函数修改的话,可以通过使用const参数来实现,使用const参数的另一个好处是,它告诉函数的使用者,这个参数是不会被改变的。

从C语言实现的角度来说,指针跟数组的关系是非常紧密的。指针实现了对内存的操作方法,而数组可以认为就是内存中一系列联系的存储单元。因此从这上面来说,通过指针来操作数组是完全可行的。准确的说应该是所有通过数组下标能完成的操作都可以通过指针来实现,而且通过指针来访问数组中的元素还有性能上的优势,但它的劣势也是非常明显的,非常的不直观,这种不直观和从0开始真是没法比。指针加一的意思并不是将指针的地址值加上一,而是将指针的位置移向联系内存空间的下一个地址,这种移动是以指针中存储的变量类型为单位来移动的,比如说如果是一个int型的指针,那么下一个位置就是直接跨过当前这个int型变量,访问下一个int型的变量。数组中第一个元素的位置非常特别,可以认为它就是数组开始的位置,将这个值得位置赋给指针,便相当于给了指针任意访问数组的能力。还有一点就是数组名可以认为是数组的其实位置,但它不是常量,因此不可以对其进行赋值操作,但是可以把他的值赋给同类型的指针变量。

字符指针,字符指针非常的重要,这一点等明天再来补充。

0 0
原创粉丝点击