【C++沉思录】数组和指针的寻址
来源:互联网 发布:easing.js 编辑:程序博客网 时间:2024/05/18 02:28
数组是相同数据类型的数据集合,以线性方式连续存储在内存中,而指针只是保存一个地址值的4字节变量。在使用中,数组名是一个地址常量值,保存数据首元素地址,不可修改,因此只能以基地址访问内存数据。指针是一个变量,可以修改,随意访问内存数据。
数组作为参数和返回值,都是将数组的首地址以指针的方式进行传递,但是它们也有不同。将数组作为参数时,其定义所在的作用域必然在函数调用以外,在调用之前已经存在。而数组作为函数的返回值则有一定的风险。急当数组作为局部变量数据时,便出现了稳定性问题。
P.S. 字符类型的数组的赋值(初始化)其实是复制字符串的过程。这里并不是单字节的复制,而是每次复制4字节的数据。
访问数组的方式有两种:通过下标寻址和通过指针寻址。指针寻址没有下标寻址便利,效率也低。因为指针是存放地址数据的变量类型,因此在数据访问的过程中,要先取出指针变量中的数据,然后再针对数据进行地址偏移计算,从而寻址到目标数据。而数组名本身就是常量地址,可直接对数据名所代替的地址进行偏移计算。
1. 当下标值为整型常量时,由于类型大小已知,编译器可直接计算出数据所在的地址。其寻址过程与局部变量相同。
2. 当下标值为整型变量时,编译器无法计算出相应的地址,只能先进行地址偏移计算,然后得出目标数据所在的地址
3. 当下标值为整型表达式时,先计算出表达式的结果,然后将其结果作为下标值。如果是常量计算,常量会被折叠,最后还是以常量为下标寻址。
- 【C++沉思录】数组和指针的寻址
- 【C++沉思录】数组指针的不同含义
- 数组和指针寻址
- 经典数据结构沉思录(二):数组和链表
- c++沉思录中代理类和c++primer中句柄类的对比
- 数组 指针比较 直接寻址和间接寻址 数组和指针在编译的时候的区别
- 数组 指针比较 直接寻址和间接寻址 数组和指针在编译的时候的区别。。。
- C/C++沉思-----指针函数和函数指针
- C/C++沉思-----指针函数和函数指针
- 沉思录:别人的棺材
- 工作后的沉思录
- 指针数组的应用-间接寻址表
- 【iOS沉思录】iOS中的二维数组
- 数组指针寻址
- 关于用二维数组调用函数的寻址(多维数组和指针)
- 沉思录
- 沉思录
- 沉思录
- ubuntu中关闭防火墙
- 【C++沉思录】构造函数与析构函数的出现时机
- Web版RSS阅读器(四)——定制自己的Rss解析库myrsslib4j
- C++隐藏任务栏和桌面
- C++中public,protected,private访问
- 【C++沉思录】数组和指针的寻址
- 【C++沉思录】switch比if else要高效的原因
- localhost 和 127.0.0.1的区别
- 关于mysql导入导出数据库的方法
- rqn 51 乒乓球(字符串处理)
- DBCA报错, ORA-15045 ORA-17502 ORA-15081
- 【C++沉思录】编译器使用的优化技巧
- 用PersonalRank实现基于图的推荐算法
- codility上的问题(13) MU 2011