指针,数组,引用之间的不同点
来源:互联网 发布:壹卡会可以在淘宝用吗 编辑:程序博客网 时间:2024/05/19 05:01
指针和数组的区别:
- 数组整数变量加1,其值将增加1,,但将指针变量加1后,增加的量等于它指向的类型的字节数。
- 指针的值可以修改,而数组名是常量不可以修改。
- 对数组应用sizeof运算符得到的是数组的长度,而对指针应用sizeof得到的是指针的长度。
- 对数组取地址时,数组名也不会被解释为其地址,
short tell[10]
的&tell[0]
是一个2字节内存快的地址,而&tell
是一个20字节内存快的地址,因此表达式tell+1
将地址值加为2,而表达式&tell+1
将地址加20.
#include <iostream>using namespace std;int main(){ double wages[3]={10000.0,20000.0,10000.0}; short stacks[3]={3,2,1}; double *pw=wages; cout<<"pw= "<<pw<<endl; double *pe=pw; //指针加1就增加类型的字节数 pe=pe+1; //wages=wages+1; 编译错误,数组名是常量不能改变 cout<<"add 1 to the pw pointer"<<endl; cout<<"pe= "<<pe<<endl; //相减就不按照类型字节 cout<<"pe-pw= "<<pe-pw<<endl; //数组和指针的sizeof区别 cout<<sizeof(wages)<<" = size of wages array"<<endl; cout<<sizeof(pw)<<" = size of pw pointer"<<endl; //数组取地址时的区别 cout<<"wages= "<<wages<<endl; cout<<"wages+1= "<<wages+1<<endl; cout<<"&wages+1= "<<&wages+1<<endl; return 0;}
运行结果:
pw= 0x7ffd58ff01c0
add 1 to the pw pointer
pe= 0x7ffd58ff01c8
pe-pw= 1
24 = size of wages array
8 = size of pw pointer
wages= 0x7ffd58ff01c0
wages+1= 0x7ffd58ff01c8
&wages+1= 0x7ffd58ff01d8
引用和指针的区别:
- 引用是是它引用变量的别名,而指针是指向变量的一个变量,其区别如图所示:
- 引用必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值。
- 引用接近const指针,一旦与某个变量关联起来,其引用的变量就不可改变,而指针可以改变其指向的变量。
- 引用自增自减是数值上的自增自减,而指针自增自减是地址的自增自减,意义不一样。
- 引用使用时无需解引用(*),指针需要解引用。
#include <iostream>using namespace std;int main(){ int rats=10; //int &test; 编译报错,因为引用必须在声明就赋值 int &rodents=rats; int *ropointer=&rats; //引用和指针指向的区别 cout<<"address of rat="<<&rats<<endl; cout<<"address of rodents="<<&rodents<<endl; cout<<"address of ropointer="<<&ropointer<<endl; int t=100; //引用一旦赋值就不可以改变其引用,而指针可以 rodents=t; cout<<"rodents="<<rodents<<endl; cout<<"rats="<<rats<<endl; t=500; ropointer=&t; cout<<"ropointer="<<*ropointer<<endl; cout<<"rats="<<rats<<endl; //引用和指针自增自减 cout<<"++ropointer="<<++ropointer<<endl; cout<<"++rodents="<<++rodents<<endl; return 0;}
运行结果:
address of rat=0x29ff18
address of rodents=0x29ff18
address of ropointer=0x29ff14
rodents=100
rats=100
ropointer=500
rats=100
++ropointer=0x29ff14
++rodents=101
下面是一些函数使用指针或引用指导原则:
对于使用传递的值而不作修改的函数:
- 如果数据对象很小,如内置数据类型或小型结构,则按值传递。
- 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
- 如果数组对象是较大的结构,则使用const指针或const引用,以提高程序的效率,这样可以节省复制结构所需的时间和空间。
- 如果数据对象是类对象,则使用const引用。
对于修改调用函数中数据的函数:
- 如果数据对象是数组,则只能使用指针。
- 如果数据对象是结构,则使用引用或指针。
- 如果数据对象是类对象,则使用引用。
- 如果数据对象是内置数据类型,则使用指针。
0 0
- 指针,数组,引用之间的不同点
- 数组与指针的不同点
- 数组与指针的不同点
- 指针跟数组的不同点
- 指针和引用的相同点和不同点
- C++中指针和引用的相同点和不同点
- 1.说出指针与引用的3大不同点?
- 指针,引用之间的关系
- 数组的引用和指针的引用
- 【面试常见问题】【C++】指针和引用的区别,有哪些不同点,细细道1
- 【面试常见问题】【C++】指针和引用的区别,有哪些不同点,细细道2
- 指针进化------指针数组的引用
- C++ 数组的指针,指针的数组, 数组引用
- 指针与引用之间的区别
- C++ 指针与引用之间的区别
- 引用与指针之间的故事
- 数组<->指针<->动态数组之间的关系
- 数组<->指针<->动态数组之间的关系
- 43243
- Java序列化Serializable解析
- 使用 Environment Indicator 模块区分不同的 Drupal 环境
- AutoLayout
- 【Boost】boost库中thread多线程详解11——线程的休眠和中断
- 指针,数组,引用之间的不同点
- php生成二维码
- intent的startActivityForResult()方法使用注意事情
- js控制横向滚动条居中,鼠标在页面中的坐标
- Spring Context 启动错误
- 简单字符驱动程序
- Qual F&Q
- UI组件之ViewFlipper实现自动播放的图片库
- Oracle存储过程中常见异常记录