C/C++指针和数组之间的区别


〇:c语言中左值、右值和赋值操作

x = y;

左值:在上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,编译器在一个特定的区域保存这个地址。
右值:在这个上下文环境中,编译器认为y的含义是y所代表的地址里面的内容,这个内容是什么,只有到运行的时候才知道。

一、数组相关操作和概念

1.搞清楚数组做左值和右值的区别,对理解指针数组很重要,如下代码
中第2行和第3行的作用是等价的,数组名在做右值的时候,就表示数组首元素的首地址,而数组名不能做左值。
2.&a[0]和&a的值虽然相同,但是两者意义不同,&a[0]表示数组中元素的地址,&a代表整个数组的地址。

int a[]={1,2,3,4,5};
int *p = a;
p = &a[0];

二、数组和指针的区别和联系

1.指针和数组是不同的两个概念,只是两者都可以用下标或者指针的方式进行访问;
2.指针的访问方式是匿名的访问方式,数组的访问方式是具名加匿名的方式访问的;
3.传递数组参数给函数的时候,数组就会退化成常量指针,形参接收到的是数组首元素的地址,而不是整个数组的元素内容;
4.数组的初始化或者赋值使用的是值传递的方式,如下

int array[5];
int a = 10;
array[0] = a; //这一步的操作是将a的值复制一份然后放入array[0]中

 

三、指向数组的引用

int array[5] = {0};
int (&p) [5] = array; //定义方式和定义一个数组指针类似
cout << sizeof(array) << sizeof(p) <<endl; //都是20
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值