精华内容
下载资源
问答
  • 接下来是一个更为复杂的解释为什么这个工作:) 我不知道你对C指针的了解程度如何,但C中的数组访问(如 array[2] )实际上是通过指针访问内存的简写 . 要访问 data 指向的内存,请编写 *data . 这称为解除引用指针 . ...

    这可以通过使用指针,并使用 malloc 在堆上分配内存来完成 . 请注意,以后无法询问内存块有多大 . 您必须自己跟踪阵列大小 .

    #include

    #include

    #include

    int main(int argc, char** argv)

    {

    /* declare a pointer do an integer */

    int *data;

    /* we also have to keep track of how big our array is - I use 50 as an example*/

    const int datacount = 50;

    data = malloc(sizeof(int) * datacount); /* allocate memory for 50 int's */

    if (!data) { /* If data == 0 after the call to malloc, allocation failed for some reason */

    perror("Error allocating memory");

    abort();

    }

    /* at this point, we know that data points to a valid block of memory.

    Remember, however, that this memory is not initialized in any way -- it contains garbage.

    Let's start by clearing it. */

    memset(data, 0, sizeof(int)*datacount);

    /* now our array contains all zeroes. */

    data[0] = 1;

    data[2] = 15;

    data[49] = 66; /* the last element in our array, since we start counting from 0 */

    /* Loop through the array, printing out the values (mostly zeroes, but even so) */

    for(int i = 0; i < datacount; ++i) {

    printf("Element %d: %d\n", i, data[i]);

    }

    }

    而已 . 接下来是一个更为复杂的解释为什么这个工作:)

    我不知道你对C指针的了解程度如何,但C中的数组访问(如 array[2] )实际上是通过指针访问内存的简写 . 要访问 data 指向的内存,请编写 *data . 这称为解除引用指针 . 由于 data 的类型为 int * ,因此 *data 的类型为 int . 现在来看一条重要的信息: (data + 2) 表示“将2个字节的字节大小添加到 data 指向的地址” .

    C中的数组只是相邻内存中的一系列值 . array[1] 紧挨着 array[0] . 因此,当我们分配一大块内存并希望将其用作数组时,我们需要一种简单的方法来获取内部每个元素的直接地址 . 幸运的是,C允许我们在指针上使用数组表示法 . data[0] 表示与 *(data+0) 相同的内容,即“访问 data 指向的内存” . data[2] 表示 *(data+2) ,并访问内存块中的第三个 int .

    展开全文
  • /* 二维数组 数组中的数组,数组里面储存的还是数组 定义方式和一维数组很相似 方式一: int[][] arr = new int[3][4]; 定义一个二维数组 [3] 表示:二维数组中有3个一维数组 [4] 表示:每个一维数组的长度是4 ...
    /*
    二维数组
    数组中的数组,数组里面储存的还是数组

    定义方式和一维数组很相似

    方式一:
    int[][] arr = new int[3][4];
    定义一个二维数组
    [3] 表示:二维数组中有3个一维数组
    [4] 表示:每个一维数组的长度是4

    方式二:
    int[][] arr = new int[3][]   不推荐
    二维数组中定义三个一维数组,每个一维数组长度没有指定
    arr[0]
    arr[1]
    arr[2]
    必须要new
    arr[0] = new int[5];
    arr[1] = new int[4];

    方式三:
    int[][] arr = { {0,1,2},{3,6},{5,8,9} };

    二维数组的遍历
    二维数组中存储四个一维数组,每个一维数组长度不同

    遍历:for循环,遍历二维数组
    遍历过程中,for循环遍历一维数组
    */
    public class ArrayArrayDemo{
    public static void main(String[] args){
    int[][] arr = new int[3][4];
    System.out.println(arr);

    System.out.println(arr[2]);
    System.out.println(arr[2][3]);

    int[][] arr2 = { {1,2,3},{4,5},{6,7,8,9},{0} };
    //打印数组中的7
    System.out.println(arr2[2][1]);

    //打印0
    System.out.println(arr2[3][0]);

    //遍历二维数组
    for(int i = 0;i < arr2.length;i++){
    //遍历一维数组
    for(int j = 0;j<arr2[i].length;j++){
    System.out.print(arr2[i][j]);
    }
    System.out.println();
    }
    }
    }
    展开全文
  • 此字符数组的定义编译可以通过,但却没有关闭数组,若其后需要申请内存,那么以后数据均会放入其中,尽管它的长度不够,但若为 char s[5]={'a','b','c','d'};则系统会自动在字符串最后存放一个结束符,并...

    C语言和Java字符串与字符数组区别

    1. C 语言

    在C语言中字符串和字符数组基本上没有区别,都需要结束符;如:char s[4]={'a','b','c','d'};此字符数组的定义编译可以通过,但却没有关闭数组,若其后需要申请内存,那么以后的数据均会放入其中,尽管它的长度不够,但若为 char s[5]={'a','b','c','d'};则系统会自动在字符串的最后存放一个结束符,并关闭数组,说明字符数组是有结束符的;

    而字符串定义的长度必须大于字符序列的长度,如:char s1[4]={"abcd"};编译不能通过,而应写成char s1[5]={"abcd"};并且系统会自动在字符串的最后存放一个结束符,说明字符串有结束符;

    在C语言中使用strlen()函数可以测数组的长度,strlen()函数计算的时候不包含结束符'/0'。

    char s[5]={'a','b','c','d'};

    char s1[5]={"abcd"};

    int a=strlen(s);

    int b=strlen(s1);

    结果是a,b均为4;

    2.Java语言

    字符串和字符串数组都是不需要结束符的;

    如:char[] value={'j','a','v','a','语','言'};

    String s1=new String(value);

    String s2="java语言";

    int a=value.length;

    int b=s1.length();

    int c=s2.length();

    运行得到的结果a,b,c都是6,说明字符串和字符串数组都不需要结束符。但注意此处value.length和s1.length(),在数组中有名常量length可以记录数组对象的长度,而length()是File类中的一个实例方法,用于返回文件的大小,当然也可以返回字符串的大小。

    展开全文
  • 一旦java数组定义数组的长度,就不能做修改。但是python 没有这个限制。数组的取值可以用数组的下标进行取值,改值需要直接arr[i]=x形式。定义方式:数据类型[] 变量名= new(非内部数据类型) 数据类型[...

    一:

    在java中定义数组类似于python的列表,但是python的列表存储的数据类型可以是任意的,但是java在声明一个数组的时候,需要指定类型,而且之只能存储一个类型的数据。一旦java数组定义了数组的长度,就不能做修改。

    但是python 没有这个限制。数组的取值可以用数组的下标进行取值,改值需要直接arr[i]=x形式。

    定义方式:数据类型[]  变量名= new(非内部数据类型) 数据类型[长度]

    如下:

    1 public classprint_In{2 public static voidmain(String[] args){3 int[] arr=new int[100];4 inti;5 for (i=1;i<100;i++){6 arr[i]=i;7 System.out.println("arry is "+arr[i]);8 }9 arr[99]=127;10 System.out.println("the index of 99 is"+' '+arr[99]);11 }12 }

    在初始化数组的时候,整数的值为0,字符串为null。对象数组初始化为null,表示没有对象,布尔初始化为false。

    想修改初始值,可以使用for循环来改变。

    a5c3e3fdf9ab0161fc6768b93f140ad3.png

    判断元组的长度,可以使用length来计算。

    数据的下标 也就是索引也是从0开始到n-1和python 的一样,所以如果取数组的值:a[n]这种情况的话,会抛出错误。在这种情况下可以用数组的length方法来判断,避免出现错误如下:

    1 public classarr {2 public static voidmain(String[] args){3 int[] arr_test=new int[10];4 for(int i=2;i

    需要注意:

    printf()方法只能输出字符串类型!!

    7134e28f86f38b11c07c55399438c120.png

    还有更好的方法:

    for  each方法

    1 public classarr {2 public static voidmain(String[] args){3 int[] arr_test=new int[10];4 for (inta:arr_test){5 System.out.println(a);6 }7 }8 }

    语法:

    for(数据类型 变量:可迭代的列表或者迭代器){

    statement;

    }

    变量和迭代的对象类型一样,变量和迭代对象之间用冒号:  来连接 不是分号!!!

    如上的操作可以更加简洁的输出我们的迭代对象!

    数组的初始化和匿名数组

    初始化的时候,不需要使用new关键字!!

    1 public classarr {2 public static voidmain(String[] args){3 int[] arr_test={1,2,3,4,5,6};4 for (inta:arr_test){5 System.out.println(a);6 }7 }8 }

    改变数组的长度和赋值:

    使用Arrarys.copyOf(arra,length)

    1 importjava.util.Arrays;2

    3 public classarr {4 public static voidmain(String[] args){5 int[] arr_test={1,2,3,4,5,6};6 int[] arr_res;7 arr_res= Arrays.copyOf(arr_test ,2*arr_test.length);8 for (inta:arr_res){9 System.out.println(a);10 }11 }12 }

    可以通过这个方法间接修改数据的长度。

    如果数据的长度一样,那么他们指向同一数组。

    Arrarys.toString方法:

    将数组转换成一个用中括号括起来的字符串。

    1 importjava.util.Arrays;2

    3 public classarr {4 public static voidmain(String[] args){5 int[] arr_test={1,2,3,4,5,6};6 String[] arr_str=new String[10];7 arr_str[0]=Arrays.toString(arr_test);8 System.out.println(arr_str[0]);9 }10 }

    32753b701783ce132f67529b9d49e752.png

    展开全文
  • 问题是:在哪里定义了“长度”?受保护Object clone()被公共访问覆盖与我们一样使用co-variant返回类型(byte []替换Object)说明符可以直接将其分配给一个字节[]?与Cloneable和Serializ...
  • 1.实现空数组 //定义一个空数组, int[] a=null; int[] a={}; int[] a=new int[0]; 注意:空数组没有空间,不能赋值!... //定义一个长度为10的数组b int[] c={7,1,2,3,8}; //定义一个数组c,并赋值,其中
  • Java中对于多维数组的概念不是特别严格,或者说 ,在Java中不存在多维数组的概念,和C语言区分,一般称之为数组中的数组。 初始化操作 下面以二维数组为例: 静态初始化: int[][] arr = new int[][]{{1,2,3},{4,5...
  • java数组和C语言数组的区别

    千次阅读 2015-11-15 23:13:16
    说到java中和C语言中一个挺大区别就是同样变量申明可能... 声明一个整形数组a,长度为5,在内存所引起操作,为数组分配一片连续内存空间存放这5个数组数组名便是首地址,故没有开创一个内存存放数组名。
  • 冒泡排序//冒泡排序:每次循环将相邻两个数中数值大往后移动一位//由于外循环是依据数组长度定义循环次数,总循环次数保证了即使剩两个数也会循环一次来做比较//内循环每次循环保证排好序位置不去比较,没排好位...
  • 我现在定义了一个30长度的数组 但是里面是有前两个是有值的,其他的都是null 没有赋值,我用for循环查找里面的一个值是不是在这个数组里面,当这个值不在数组里面的时候 会直接抛出异常 调试模式下 我发现for循环...
  • 1. 数组的定义:1.1 存放一组数据类型相同变量;1.2 声明/定义/初始化:元素数据类型[] 数组名 = new 元素数据类型[数组长度];1.3 数组名存放在栈中,数组本身是一个对象,数组对象本身存放在堆上。1.3.1 如果只...
  • 定义和用法split() 方法用于把一个字符串分割成字符串数组。...该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考...
  • Java的数组定义

    2018-08-20 01:09:43
    近日,重装了java环境,使用jdk1.6,重新从基础学习出发。 首先,对于数组Java里面建立数组... * 如果在分配空间时候没有初始化,这叫动态初始化,之后不能使用{}赋值 */ //1.不指定数组长度,直接...
  • 数组 数组元素可以是基本数据类型,也可以是类类型 ...Java数组的定义中不会为数组元素分配内存,所以在[]中不能指定数组长度 创建数组定义没有为数组分配内存,要想应用数组必须给出数组长度,即创建数组
  • Java学习之路——数组

    2021-04-08 16:00:14
    例如,现在想要定义100个整型变量,按照之前思路,我们需要定一个100个整型变量,虽然满足要求,但是各个变量完全独立,没有任何逻辑关系,我们使用和管理都会很不方便,所以这是我们就需要利用数组来解决这个问题...
  • 此字符数组的定义编译可以通过,但却没有关闭数组,若其后需要申请内存,那么以后数据均会放入其中,尽管它的长度不够,但若为char s[5]={'a','b','c','d'};则系统会自动在字符串最后存放一个结束符,并关闭...
  • Java数组的定义和使用

    万次阅读 多人点赞 2018-06-02 00:40:03
    如果希望保存一组有相同类型数,可以使用数组。...与C、C++不同,Java定义数组时并不为数组元素分配内存空间,因此[]中无需指定数组元素个数,也就是数组长度。所以我们需要先分配内存空间,才能访问数组...
  • 数组初始化完成后,java为数组分配一段连续空间,其在内存中开辟空间也随之固定,此时数组的长度将不再发生变化,即使数组没有保存任何数据,其所占用空间依然存在 二.定义数组的语法有以下两种: 数据类型[ ] ...
  • 数组的变量存储内存地址3、动态数组:​由于数组的长度定义后不能改变,所谓“动态数组”是可以增加数组的长度,所以Java实现动态数组是改变数组变量指向不同内存地址。本质并没有数组的长...
  • 很遗憾在Java中是没有函数可以获得数组的实际长度的。例如定义一个数组int a[ ]=new int[100],这时会默认每个元素都是0,使用a.length得到的数组长度是100,如果用户输入的数据没有100个,那么后面的元素就都是0,...
  • Java第四章_数组

    2020-11-17 14:54:27
    数组 基本概念及作用 数组是相同数据类型元素的集合。 数组本身是引用类型,即对象。 可以存储基本数据类型和引用数据类型。...java的数组在创建时,必须要为其定义长度长度定义后就不能修改。 int
  • 动态数组是指在声明时没有确定数组大小的数组,后期可根据需要改变长度。除此之外,还需要配备一些基本功能: 添加元素 删除元素 (按索引或值)查找元素 此外,这里实现的动态数组需要可以装入各种类型的元素,我们...
  • 在使用 Java 数组的时候,假如要新建一个二维数组,可以使用以下的方式来新建,只需要指定数组第一维的长度:int[][] arr1 = new ...本文基于 JDK11数组的定义和初始化Java的数组与其他语言中的数组没有什么区别...
  • java和c定义二维数组下标省略问题

    千次阅读 2018-02-01 14:27:40
    引用评论区的解释:java中二维数组是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。 二维简单数据类型数组的动态初始化如下: int a[ ][ ] = new int[2][ ]; a...
  • java引用数据类型-数组

    千次阅读 2016-10-23 14:45:52
    数组的定义 数组用于将相同类型数据存储在连续存储单元中; 可以通过指定数组的名称和长度来声明数组; 一旦声明数组的大小,就不能再修改; 数组元素通过数组名和索引来访问,索引从0开始; 数组可以是一维,也...
  • Java总结(二)数组

    2019-09-28 21:24:42
    array数组(即包括类型和名称),但此时仅声明一个数组对象引用并没有实际分配空间,要通过接下来的创建为其开辟空间,即第三行的new语句,为my_array数组开辟了长度为10的数组空间,下标为0-9(数组名 = new 数组...
  • Java学习笔记_07 数组

    2020-11-05 20:29:09
    首先需要进行声明,告知编译器你想使用什么数据类型的数组?数组的名称又是什么? 声明数组:语法结构: 数据类型 [] 数组名; int [] arr; 注意:声明数组时没有开辟存储空间 如何创建数组? 有两种方式:...
  • 数组---是用来存储一组相同数据类型数据容器 数组本身是一个引用数据类型【】 ...数组的定义/声明 2.数组的初始化 静态初始化---有长度 有元素 动态初始化---有长度 没有元素(默认) in...
  • Java数组的定义与使用

    2019-07-18 18:19:05
    数组:引用类型变量,一组相关类型变量集合,并且这些变量可以按照统一...②当数组采用动态初始化开辟空间后,数组每个元素都是该数据类型默认值(0类型含义)如果数组元素没有初始化元素值就是元素...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 454
精华内容 181
关键字:

java定义没有长度的数组

java 订阅