关于c/c++和java中数组整体赋值的问题

先看代码实例,c代码
#include "stdio.h"

int main()
{
int a[4]={1,2,3,4};//开辟了一块空间,地址为a
int b[4];//开辟了一块新的空间,地址为b
int i;
b=a;//这句话是错误的。因为a本来就不等于b。
b[2]=8;
for (i=0;i<4;i++)
{
printf("%d %d",a[i],b[i]);
}
return 0;
}
会报错:error C2106: '=' : left operand must be l-value。
因为C/C++中,数组名就是数组第一个元素的地址,也就是一个常量指针,比如,int a[4] , b[4];
则a和b都是常量指针(其值肯定是不同的),如果你执行a = b;那就是企图修改常量指针a的值,而在C/C++里,任何常量都是不允许被修改的。
a[1]或*a才是a中第一个元素的内容。
如果想要复制,可以用for或者copy。

============================================================================================================================

下面看java代码
public class demo1{
public static void main (String arg[])
{
int IntArray2[]={3,5,7,9};//开辟了空间。
int IntArray3[];//开辟空间。
IntArray3=IntArray2;//这句话在java中是通过的。2和3共用一块空间。
for(int i=0;i<IntArray3.length;i++)
System.out.println(IntArray2[i]+"\t");
System.out.println("IntArray2:  ");
for(int i=0;i<IntArray2.length;i++)
System.out.println(IntArray2[i]+"\t");
}
}
虽然通过了,但是并不是代表java中没有指针。
其实java中是有指针的。可以理解为JAVA是C的优化版就成了.JAVA的所有概念源于C的最好设计方案.

C中用指针传变量,在子函数中可接收为值,也可接收为值的地址,这就造成了一定的编程难度, 容易产生错误, 所以在JAVA中只保留了子函数只能接收值的用法, 并改名为引用.

1: java有指针,在java中称为 引用。 所谓的引用就是内存地址的值。拿到该引用就相当 于得到了该内存处的对象。
2: java中可以使用指针(我们称之为引用),但不能修改引用。
  如C++中可以 进行pointer++; 在java中是错误的。(Integer,Float等包装类除外,因为java有自动封箱、解箱特性)。
  这就好比:在java中可以坐飞机到指定的目的地,但是你不能开飞机(安全)。但是在C++中可以自己开飞机(操作飞机)--具有危险性。


IntArray3=IntArray2;并且注意的是,这个语句执行的时候,数组IntArray3和IntArray2公用一个存储空间。因此IntArray3和IntArray2输出的结果是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值