精华内容
下载资源
问答
  • java声明数组方式:String[] namelist;int numlist[];//此声明为动态声明,不能指定长度,numlist[10]静态...//此声明方式必须声明长度不像C语言一样传入指针,你可以传入java数组的索引,并通过形参进行访问,最为简...

    java声明数组方式:

    String[] namelist;

    int numlist[];//此声明为动态声明,不能指定长度,numlist[10]

    静态声明的方式:

    int a[]={1,2,3,45,6}

    动态声明方式:

    int numlist[]

    当然你也可以:

    int a[]=new int[10];//此声明方式必须声明长度

    不像C语言一样传入指针,你可以传入java数组的索引,并通过形参进行访问,最为简单的方式在此不提,

    这里介绍一种特殊的遍历方式:、

    public static void main(String[] args) {

    int as[]={1,5,6};

    int[] a=new int[10];

    Diaosi li=new Diaosi();

    li.print(a);

    }

    protected void print(int...deal){

    //需要注意的是int i必须在for循环里声明

    for(int i:deal){

    System.out.println(i);

    }

    }

    数组存储的理解:

    int a[];

    String a[];

    Diaosi a[];

    上述声明的数组代表了我个人认为的数组的三大类。

    基本数据类型和引用数据类型,引用数据类型就是对象或字符串。

    数组的声明中内存的分配情况:

    当数组被声明时,栈会给其分配一个引用,此时数组还没有真正意义上的存储。当我们new出一个数组,或给数组赋值时,这个引用会指向那个存储地址。

    展开全文
  • C语言中,数组名作为参数传递给函数时,退化为指针;...首先C语言里面不支持数组作为形参来进行调用,例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为指针来处理的,所以上面的函数完全等...

    C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,

    需要一个参数传数组名,另一个传数组大小。

    数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。

    一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。

    首先C语言里面不支持数组作为形参来进行调用,

    例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为指针来处理的,所以上面的函数完全等价于void fun(int *a);

    所以当你利用sizeof的时候返回的将是int指针的内存字节数,所以当你想知道数组长度的时候只能做这样的函数了,void fun(int *a,size_t n);

    数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首地址,如 fun (char[8]),fun(char [])都等价于 fun(char*)~~

    在C++里传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。

    如果想在函数内知道数组的大小,需要这样做:进入函数后用memcpy将数组复制出来,长度由另一个形参传进去~~

    代码如下:

    fun (unsigned char *p1,int len)

    {

    unsigned char* buf = new unsigned char[len+1];

    memcpy(buf,p1,len);

    }

    转载至链接:https://my.oschina.net/u/3318187/blog/1935226

    展开全文
  • 根据教程及楼上我又修改了一下代码,看看三种方法中形参 arr 所占内存大小。#include using namespace std;double getAverage(int *arr, int size); //形式参数是一个指针:double getAverage(int arr[5]); // 重载...

    根据教程及楼上我又修改了一下代码,看看三种方法中形参 arr 所占内存大小。

    #include

    using namespace std;

    double getAverage(int *arr, int size); //形式参数是一个指针:

    double getAverage(int arr[5]); // 重载函数,形式参数是一个已定义大小的数组:

    double getAverage2(int arr[]); // 不可重载,形式参数是一个未定义大小的数组:

    int main(int argc, char const *argv[])

    {

    // 带有 5 个元素的整型数组

    int balance[5] = {1000, 2, 3, 17, 50};

    int *pt1 = balance;

    // 分别计算数组元素个数,以及整型指针的字节数

    size_t balance_size = sizeof(balance) / sizeof(int);

    size_t pt1_size = sizeof(pt1);

    double avg, avg2, avg3;

    cout << "array size : " << balance_size << endl;

    cout << "pt1_size : " << pt1_size << endl;

    avg = getAverage(balance, 5);

    avg2 = getAverage(balance);

    avg3 = getAverage2(balance);

    // 输出返回值

    cout << "方法1平均值是:" << avg << endl;

    cout << "方法2平均值是:" << avg << endl;

    cout << "方法3平均值是:" << avg << endl;

    return 0;

    }

    double getAverage(int *arr, int size)

    {

    int i, sum = 0;

    double avg;

    // 打印第一个形参的字节数

    cout << "Inside getAverage sizeof(arr) = " << sizeof(arr) << endl;

    for (int i = 0; i < size; ++i)

    {

    sum += arr[i];

    }

    avg = double(sum) / size;

    return avg;

    }

    double getAverage(int arr[5])

    {

    int i, sum = 0, size = 5;

    double avg;

    // 打印第一个形参的字节数

    cout << "Inside getAverage sizeof(arr) = " << sizeof(arr) << endl;

    for (int i = 0; i < size; ++i)

    {

    sum += arr[i];

    }

    avg = double(sum) / size;

    return avg;

    }

    double getAverage2(int arr[])

    {

    int i, sum = 0, size = 5;

    double avg;

    // 打印第一个形参的字节数

    cout << "Inside getAverage sizeof(arr) = " << sizeof(arr) << endl;

    for (int i = 0; i < size; ++i)

    {

    sum += arr[i];

    }

    avg = double(sum) / size;

    return avg;

    }

    运行结果为:

    array size : 5

    pt1_size : 8

    Inside getAverage sizeof(arr) = 8

    Inside getAverage sizeof(arr) = 8

    Inside getAverage sizeof(arr) = 8

    方法1平均值是:214.4

    方法2平均值是:214.4

    方法3平均值是:214.4

    结论:

    三种方法都是通过指针完成数组传递,arr 都占用 8 字节内存,虽然表面形式不一样。具体原因我也不清楚,希望有高手具体解答。

    YoungWilliam

    YoungWilliam

    you***illiam.zheng@gmail.com2年前 (2019-04-05)

    展开全文
  • 引用类型:类似于方法形参是C语言的指针,可以改变主方法的值(传递地址) 多维数组 语法:int【】【】 arr; 二维数组数组中的每一个元素是一个一维数组。 n维数组:… 严格上说java中没有多维数组的概念,和C区分...

    数组高级

    方法参数的值传递机制

    基本类型:值传递
    引用类型:类似于方法形参是C语言的指针,可以改变主方法的值(传递地址)

    多维数组

    语法:int【】【】 arr;

    二维数组:数组中的每一个元素是一个一维数组。
    n维数组:…
    严格上说java中没有多维数组的概念,和C区分,一般称为数组中的数组

    多维数组操作

    二位数组初始化操作:(比作一个表格)

    静态初始化:
    在这里插入图片描述
    动态初始化:
    在这里插入图片描述

    增强for循环foreach

    语法:
    for(数组元素类型 变量 : 数组名)
    {

    ​ 循环体

    }
    在这里插入图片描述
    底层本质:
    在这里插入图片描述
    所以增强for循环只是编译前的新特性–>语法糖
    作用:让开发者写更少更简单的代码,完成相同的功能

    foreach–>集合框架(操作对象)

    方法的可变参数

    可变参数是参数的个数可变:
    在这里插入图片描述
    其本质:
    在这里插入图片描述
    方法的可变参数也是编译器级别的新特性,语法糖。
    其底层就是数组类型

    方法的可变参数必须是形参的最后一个参数
    推论:方法最多只有一个可变参数

    数组拷贝

    经常使用,SUN把数组拷贝操作存放在JDK中的System类中.

    Object:java语言中的根类,Object可以表示任意数据类型.
    在这里插入图片描述

    选择排序

    真正选择排序
    在这里插入图片描述

    查找算法(二分法查找)

    1.线性搜索:对于元素过多的数组,性能极低

    2.二分搜索:前提是数组元素必须有序(需要排序)速度特别快

    底层:
    在这里插入图片描述

    自行封装ArrayUtil工具

    封装成一个类

    Java自带数组工具类(Arrays)

    java.util.Arrays

    展开全文
  • 因为c++有指针,而java没有,所以我做一个测试验证形参是否会影响实参。* 首先第一种情况---基本类型 哈哈,其实结果大概和我想的一样 第二种情况---封装类 还是没变 第三种情况--数组 哇,终于变了...
  • C/C++ 数组变量声明备忘

    千次阅读 2012-02-28 14:09:50
    用习惯了.net, java的人,用C/C++的数组还是很不习惯的。C/C++中数组指针是等价的,但是在写法上稍有 1,形参 例如,以数组形参,有两种写法: int FindMax1(int* Array); int FindMax2(int Array[]); ...
  • 【判断题】语句char *a="china"; 与char *a;...p_sort函数原型如下: void p_sort(int *p,int n) 其中,p是指向int型一维数组指针变量,n是数组长度。 (16.0分)【单选题】有如下定义: int k=2; int *pt...
  • Java 指针和字符串简述

    千次阅读 2016-05-28 19:22:05
    1、对象数组 (1)对象数组的定义与访问 定义对象数组: 类名 数组名[元素个数]; 访问对象数组元素,通过下标访问: 数组名[下标].成员名 (2)数组元素所属类的构造函数 元素所属的类不声明构造函数,则...
  • 本书的第三章几乎就是在讲明白迭代器,数组下标和指针...2,数组下标其实就是数组中首个元素的位置加上下标值后的位置所对应的一个指针(这样也能解释为什么java数组的元素可通过形参改变了。) 比如下面这个 p //
  • ——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-第一讲 数组名和数组指针...同样,指针变量的值也是地址, 数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。float aver(float *
  • C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了。 1. 另一方面使用指针的优点和必要性: 指针能够有效的表示数据结构 能动态分配内存,实现内存的自由管理 能较方便的使用字符串 便捷高效地...
  • 第一个参数是整型,第二个参数是一个指向字符型指针数组指针或一个基本类型为字符型的指针数组,此时传给形参的值只能从命令行中得到。1.定义main函数可以带形参形参名字随便。比如可以叫main(int a, char **abc...
  • Java2021年1月

    2021-03-04 15:06:08
    5- 数组 6- 形参和实参 7- 方法重载 第二阶段 重点类和对象思想 1-面向对象 成员变量和局部变量 this指针 构造方法 2-String(字符串常量)&StringBuilder(字符串变量) StringBuffer(多线程) 和 ...
  • Java:引用和对象

    2020-08-19 22:55:51
    总结: 所谓的“引用”本质上只是存了一个地址,java数组设定成引用类型,这样的话后续进行数组参数传参,其实只是将数组的地址传入到函数形参中。这样可以避免对这个数组的拷贝(数组可能比较长,那么拷贝开销就...
  • 展开全部JAVA传递62616964757a686964616fe4b893e5b19e31333337623437参数有两种方式:值传递和引用传递值传递是传递数据:如基本数据类型都是值传递引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和...
  • 1、每种编程语言都会使用指针,C++将指针暴露给用户(程序员),而JAVA和C#等语言将指针隐藏起来了。 2、指针能够有效的表示数据结构; 3、能动态分配内存,实现内存的自由管理 4、方便使用字符串和高效使用数组 ...
  • JAVA如何在调用方法时改变实参?

    千次阅读 2019-03-15 09:45:31
    Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。 对象、数组都是引用数据类型。 Java形参如果为基本类型的话,传递的是值,所以改变的只是形参,实参不会...
  • go笔记1

    2018-06-14 10:38:36
    类型:一.基本类型:int, float, double, char, ...[n]my_type:数组类型,这个在赋值操作或函数传参(初始化)时是深拷贝的,函数传参时与C/C++中的数组的不一样,C/C++是将数组形参优化成指针。优化时使用[]my...
  • java与C++的区别

    2015-09-18 14:18:06
    C++:复制传递,参数是指针、引用时,形参与原参指向的是同一个地址,会改变原参数内容,参数不是指针、引用或数组(也算指针传递)时,不能改变原参内容。 Java:复制传递,基本数据类型进行参数传递时不能改变原参...
  • 通常对于初学C语言的同学来说,我们的main函数,都是没有形参的,那么这是怎么回事呢?根据C语言规定,main函数的参数只能有两个,习惯上这两个参数为argc和...也就是这个形参是个数组,这个数组的成员是指针。其...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    5.1.3 对象、引用和指针 111 5.1.4 对象的this引用 112 5.2 方法详解 116 5.2.1 方法的所属性 116 5.2.2 方法的参数传递机制 116 5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生...
  • java值传递和引用传递

    2019-03-24 20:25:52
    引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。 实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。 形参,而如果是对象,则...
  • java参数传递问题

    2017-11-28 15:02:51
    当我们写习惯了之后,会发现值传递也是很奇妙的问题。  1、若果形参与实参都是基本类型,等同于向被调用方法中... 2、若形参与实参都是对象类型,等同于把指针拷贝了一份 (包含了任何数组类型) ,也就是说拷贝的这一
  • Java中的值传递和地址传递

    千次阅读 2014-01-09 22:08:34
    引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。 实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。 形参,而如果是对象,则...
  • 引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。 实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。 形参,而如果是对象,则...
  • 引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。 注意: 实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。 形参,而如果是...
  • JAVA基本数据类型 基本数据类型(直接存储在栈中) 如:byte、short、int、long、char、float、double、Boolean等 引用数据类型(具体对象保存在堆中,栈中保存指向该对象的地址,类似C/C++的指针) 如:类、接口、...
  • C#部分 1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况...比如经典的数值交换函数,你传形参和传指针的结果应该知道,加了ref关键字就相当于传指针。注...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

java数组指针形参

java 订阅