【C++沉思录】数组和指针的寻址
2013-08-18 16:38
316 查看
数组是相同数据类型的数据集合,以线性方式连续存储在内存中,而指针只是保存一个地址值的4字节变量。在使用中,数组名是一个地址常量值,保存数据首元素地址,不可修改,因此只能以基地址访问内存数据。指针是一个变量,可以修改,随意访问内存数据。
数组作为参数和返回值,都是将数组的首地址以指针的方式进行传递,但是它们也有不同。将数组作为参数时,其定义所在的作用域必然在函数调用以外,在调用之前已经存在。而数组作为函数的返回值则有一定的风险。急当数组作为局部变量数据时,便出现了稳定性问题。
P.S. 字符类型的数组的赋值(初始化)其实是复制字符串的过程。这里并不是单字节的复制,而是每次复制4字节的数据。
访问数组的方式有两种:通过下标寻址和通过指针寻址。指针寻址没有下标寻址便利,效率也低。因为指针是存放地址数据的变量类型,因此在数据访问的过程中,要先取出指针变量中的数据,然后再针对数据进行地址偏移计算,从而寻址到目标数据。而数组名本身就是常量地址,可直接对数据名所代替的地址进行偏移计算。
1. 当下标值为整型常量时,由于类型大小已知,编译器可直接计算出数据所在的地址。其寻址过程与局部变量相同。
2. 当下标值为整型变量时,编译器无法计算出相应的地址,只能先进行地址偏移计算,然后得出目标数据所在的地址
3. 当下标值为整型表达式时,先计算出表达式的结果,然后将其结果作为下标值。如果是常量计算,常量会被折叠,最后还是以常量为下标寻址。
数组作为参数和返回值,都是将数组的首地址以指针的方式进行传递,但是它们也有不同。将数组作为参数时,其定义所在的作用域必然在函数调用以外,在调用之前已经存在。而数组作为函数的返回值则有一定的风险。急当数组作为局部变量数据时,便出现了稳定性问题。
P.S. 字符类型的数组的赋值(初始化)其实是复制字符串的过程。这里并不是单字节的复制,而是每次复制4字节的数据。
访问数组的方式有两种:通过下标寻址和通过指针寻址。指针寻址没有下标寻址便利,效率也低。因为指针是存放地址数据的变量类型,因此在数据访问的过程中,要先取出指针变量中的数据,然后再针对数据进行地址偏移计算,从而寻址到目标数据。而数组名本身就是常量地址,可直接对数据名所代替的地址进行偏移计算。
1. 当下标值为整型常量时,由于类型大小已知,编译器可直接计算出数据所在的地址。其寻址过程与局部变量相同。
2. 当下标值为整型变量时,编译器无法计算出相应的地址,只能先进行地址偏移计算,然后得出目标数据所在的地址
3. 当下标值为整型表达式时,先计算出表达式的结果,然后将其结果作为下标值。如果是常量计算,常量会被折叠,最后还是以常量为下标寻址。
相关文章推荐
- 关于用二维数组调用函数的寻址(多维数组和指针)
- C++反汇编学习笔记7——数组和指针以及他们的寻址
- 数组 指针比较 直接寻址和间接寻址 数组和指针在编译的时候的区别。。。
- 数组 指针比较 直接寻址和间接寻址 数组和指针在编译的时候的区别
- 【C++沉思录】数组指针的不同含义
- 数组和指针寻址
- C++逆向第十课-----数组与指针的寻址
- 基于arm的C++反汇编 数组和指针的寻址
- 字符数组,字符指针,Sizeof总结
- 数组与指针 小小区别
- 指针数组
- 数组名和指针的区别与大家分享下
- 数组与指针(一)
- C++参数传递,数组引用传递,保护数组退化为指针
- 四、数组和指针
- 《C Primer Plus》读书笔记——数组和指针(1)
- [c/c++]指针数组 pk 数组指针
- 用指针玩字符串(数组名作形参)
- c++面试题之数组与指针
- 2. 使用指针操作数组