虽然数组和指针都是针对地址操作,但它们有许多不同之处。数组是相同数据类型的数据集合,以线性方式连续存储在内存中; 而指针只是一个保存地址值的4字节变量。在使用中,数组 名是一个地址常量值,保存数组首元素地址,不可修改,只能以此为基地址访问内存数据; 而指针却是一个变量,只要修改指针中所保存的地址数据,就可以随意访问,不受约束。
8.1 数组在函数内
当在函数内定义数组时,如果无其他声明,该 数组即为局部变量,拥有局部变量的所有特性。数组中的数据在内存中的存储是线性连续的,其数据排列顺序由低地址到高地址,数组名称表示该数组的首地址。
8.2 数组作为参数
当数组作为函数形参时,函数参数中保存的是数组的首地址,是一个指针变量。
8.3 数组作为返回值
数组作为函数的返回值与作为函数的参数大同小异,都是将数组的首地址以指针的方式进行传递,但是它们也有不同。当数组作为参数时,其定义所有的作用域必然在函数调用 以外,在调用 之前已经存在。所以在函数中对数组进行操作是没有问题的,而数组作为函数返回值则存在着一定的风险。
栈平衡错误演示8.4 下标寻址和指针寻址
访问数组的方式有两种:通过下标访问(寻址)和通过指针访问(寻址)。指针寻址的方式不但没有下标寻址的方式便利,而且效率也比下标寻址低。由于指针是存放地址数据的变量类型,因此在数据访问过程中需要先取出指针变量中的数据,然后再针对此数据进行地址偏移计算,从而寻址到目标数据。数组名本身就是常量地址,可直接针对数组名所代替的地址值进行偏移计算。
网友评论