精华内容
下载资源
问答
  • 如果指针变量p1和p2都指向同一数组,如执行 p2 - p1,结果是 p2 - p1 的值(两个地址之差)除以数组元素的长度。假设,p2 指向实型数组元素 a[5],p2 的值为2020;p1指向a[3],其值为2012,则 p2 - p1 的结果是...

    如果指针变量p1和p2都指向同一数组,如执行 p2 - p1,结果是 p2 - p1 的值(两个地址之差)除以数组元素的长度。假设,p2 指向实型数组元素 a[5],p2 的值为2020;p1指向a[3],其值为2012,则 p2 - p1 的结果是(2020 - 2012)/ 4 = 2。这个结果是有意义的,表示 p2 所指的元素与 p1 所指的元素之间2个元素。这样,人们就不需要具体的知道 p1 和 p2 的值,然后去计算它们的相对位置,而是直接用 p2 - p1 就可以知道它们所指元素的相对距离。两个地址不能相加,如 p1 + p2 是无实际意义的。

    展开全文
  • 引用数组元素

    千次阅读 2019-04-24 17:15:47
    有 *(a+i), *(p+i) 两种表现形式,都是用间接访问的方法来引用数组元素。 (2)下标法。有a[i] 和 p[i] 两种形式。在编译这两种形式也要处理成 *(a+i) 或 *(p+i) ,即先按“a+i x(一个元素占用字节数)”计算出第 i...

    引用一个数组元素可以有以下两种方法:
    (1)指针法。有 *(a+i), *(p+i) 两种表现形式,都是用间接访问的方法来引用数组元素。
    (2)下标法。有a[i] 和 p[i] 两种形式。在编译时这两种形式也要处理成 *(a+i) 或 *(p+i)
    ,即先按“a+i x(一个元素占用字节数)”计算出第 i 号元素的地址,然后通过指针运算
    符 “ * ” 来引用该元素。
    下面举个例子看一下这两种用法:

    #include <stdio.h>
    int main()
    {
        int a[10],i,*p;
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
        for(i=0;i<10;i++)
            printf("%d ",*(a+i));	/*形式1:指针法之*(a+i)形式*/
        printf("\n");
        for(p=a;p<(a+10);p++)
            printf("%d ",*p);		/*形式2:指针法之*p形式*/
        printf("\n");
        for(i=0;i<10;i++)
            printf("%d ",a[i]);		/*形式3:下标法之a[i]形式*/
        printf("\n");
        for(p=a,i=0;i<10;i++)
            printf("%d ",p[i]);		/*形式4:下标法之p[i]形式*/
        printf("\n");
        return 0;
    }
    

    程序运行结果如下:
    1 2 3 4 5 6 7 8 9 10 ,然后按 enter 键得到
    1 2 3 4 5 6 7 8 9 10
    1 2 3 4 5 6 7 8 9 10
    1 2 3 4 5 6 7 8 9 10
    1 2 3 4 5 6 7 8 9 10
    上述形式 1 和形式 3 的执行效率是相同的,都要按 a+i 计算地址,然后找出该单元中的值。
    由于 p++ 这样的自增操作无须每次都重新计算地址,所以形式 2 最快。但其中的 *p 究竟
    是哪个元素,不易看出,而下表法更直观些。

    展开全文
  • 数组名在纯被引用它的含义是指向数组第一个元素的指针常量。 1 一维数组 ...1.1 表达式中的数组名 ...当定义一个一维数组后,元素以地址...当在程序的表达式中引用数组它被当成指向数组第一个元素的指针常量。

    数组名在纯被引用时它的含义是指向数组第一个元素的指针常量。


    1 一维数组

    1.1 表达式中的数组名

    当定义一个一维数组后,元素以地址连续的形式存储在内存中。当在程序的表达式中引用数组名时它被当成指向数组第一个元素的指针常量。


    Figure1:一维数组名在被引用时的含义

    TYPE 表示C语言中的一种数据类型。当定义一个维数为7每个元素的类型为TYPE的数组a之后,系统会为其分配一段内存,假设首地址为0x13145200。当数组名a用在表达式中时,a就是指向数组a中的第一个元素a[0],它是一个指向类型为TYPE的指针常量即0x13145200。a + 1表示下一个元素的地址,a + 1的具体值得根据TYPE类型在内存中所在大小来决定。当TYPE为char 类型时,a就是指向类型为char的a[0]元素的指针常量,a + 1的值就是0x13145201。当TYPE为int时,a就是一个指向类型为int的a[0]元素的指针常量,a+1的值就有可能(不同系统int所占字节有可能不同)为0x13145204。


    不同类型元素的有效地址(大地址或者小地址)细节不需要用户关心。

    1.2一维数组名的特殊含义

    在程序中定义char  a[7];


    (1) sizeof(a)

    printf("sizeof(a):%d\n", sizeof(a)); 语句输出的值为7。按理说,数组名作为一个指针常量,它的值应该为4字节(32位系统之上常见的指针变量所占内存大小)。说明在这样的方式下引用数组名时数组名不再是指针常量的含义,sizeof(a)将返回整个数组a的长度,此时数组名a方显出几分数组的气息。

    (2)&a

    printf("sizeof(&a):%d\n", sizeof(&a));   在Debian  GNU/Linux(关于sizeof(&a)的值还得看具体的编译器)下的输出来的值为4,这倒是挺符合分析结果。&a表示取a(不管a的类型如何)的指针,所以它占4字节内存。&a是一个指向类型为TYPE的整个数组的指针常量,而非指向一个指针的指针。

    2 二维数组

    2.1 表达式中的二维数组名

    二维数组跟一维数组一样,其数组名都是指向数组的第一个元素的指针常量。跟一维数组不同的是,二维数组的第一维的元素其实是另一个数组。在C语言中,多维数组可以被看作一维数组,如char m[2][7];创建了数组m,它可以被看作是一个一维数组,一共有两个元素,只是每个元素是包含7个char型元素的数组。以m数组图示笔记,

    Figure2:二维数组名被引用时的含义

    二维数组m的第一维为二维数组的元素,每个元素是包含7个char类型元素的数组。数组名m为指向二维数组第一个元素的指针常量,假设为此二维数组分配内存的首地址为0x14035200,m就代表0x14035200常量。是一个指向一个类型为char维数为7的一维数组的指针常量。m + 1的值视m的类型,是一个指向一个类型为char维数为7的一维数组的指针常量,则m + 1就是下一个类型为char维数为7的一维数组的地址。

    2.2 二维数组名的特殊含义

    (1) sizeof(m)

    printf("sizeof(m):%d\n", sizeof(m));的值为14,虽然m本身为指向m[0]的指针常量,但sizeof(m)返回整个二维数组m的在内存中所占的字节数。


    (2)&m

    在Debian GNU/Linux下,printf("sizeof(&m): %d\n",sizeof(&m));      输出的值为4,因为此时的编译器将&m视为一个指针。不过此值还得看具体的编译器。&m是指向整个二维数组m的指针常量。不过这些结论都最好在对应的编译器下测试一下。

    3 访问数组元素

    在程序中除了要用到数组名之外,很多时候也需要访问元素。数组元素的访问有间接访问和直接访问两种方式。


    3.1 间接访问

    间接访问数组元素的方式就是通过数组名加下标的方式。如a[2]访问数组a的下标为2即数组中的第三的一个元素。m[1][2]表示访问第二个元素(数组)的第三个元素。


    3.2 直接访问

    所有的间接访问形式都会被编译器转换为直接访问的方式。直接的访问形式都是通过地址访问的。


    (1) 一维数组

    如间接访问数组元素a[2]的直接访问方式为*(a +2)。


    (2) 二维数组

    理解二维数组的直接访问形式需要理解针对于二维数组来说元素的含义,二维数组中只具有第一维下标的元素是二维数组的一个元素。m[1][2]直接访问形式为*( *(m + 1) + 2),m是二维数组m第一个元素的指针常量,m + 1是二维数组m第二个元素的指针常量。此时m + 1指向类型为char、元素个数为7的一维数组,相当于&a。*(m + 1)表示取得这个一维数组中第一个元素的地址,( *(m + 1) + 2)表示在一维数组首元素地址的基础之上偏移两个元素的地址,得到第三个元素的地址,从而*( *(m + 1) + 2)取得了对应位置上的数组元素。

    直接和间接访问的区别不仅在于形式,有时候数组元素的直接访问形式的程序效率会更高。在程序花大部分时间运行在访问数组元素代码时,这样的优化就会显现效果。

    SMBox Note OVER.
    展开全文
  • ...I am thinking the <code>\</code> character is somehow escaping the $</code> of the array varaiable? i.e. <pre><code>$this->controller = new \app\controllers\$exploded_url[0];...
  • 01数组元素的指针1、指针变量既可以指向变量,也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。2、引用数组元素可以用下标法,也可以用指针法,...02在引用数组元素时指针的运算1、在一定条件下允许对指...

    01数组元素的指针

    1、指针变量既可以指向变量,也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。

    2、引用数组元素可以用下标法,也可以用指针法,即通过指向数组元素的指针找到所需的元素。

    3、使用指针法能使目标程序质量高(占内存少,运行速度快)。

    4、在C语言中,数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中首元素的地址。

    02在引用数组元素时指针的运算

    1、在一定条件下允许对指针进行加和减的运算。

    2、当指针指向数组元素时,譬如,指针变量p指向数组元素a[0],我们希望用p+1表示指向下一个元素a[1]。

    3、在指针指向数组元素时,可以对指针进行以下运算:

    (1)加一个整数,如p+1。

    (2)减一个整数,如p-1。

    (3)自加运算,如p++,++p。

    (4)自减运算,如p--,--p。

    (5)两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义)。

    03通过指针引用数组元素

    1、下标法,如a[i]形式。

    2、指针法,如*(a+i)或*(p+i)。其中 a是数组名,p是指向数组元素的指针变量,其初值p=a。

    3、用指针变量指向数组元素。

    4、可以通过改变指针变量的值指向不同的元素。

    5、要注意指针变量当前的值。

    04用数组名作函数参数

    1、C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。

    2、由于数组名代表的是数组元素地址,因此传递的值是地址,所以要去形参为指针变量。

    3、实参数组名代表一个固定的地址,或者说是指针变量,但形参数组名并不是一个固定的地址,而是按指针变量处理。

    05通过指针引用多维数组

    1、多维数组元素的地址

    (1)性质与二维数组差不多,但需要注意的是,多维数组由于分配内存情况不同,所显示的地址可能是不同的。

    2、指向多维数组元素的指针变量

    (1)指向数组元素的指针变量。

    (2)指向由m个元素组成的一维数组的指针变量。

    3、用指向数组的指针作函数参数

    (1)一维数组名可以作为函数参数,多维数组名也可以作函数参数。

    (2)用指针变量作形参,以接收实参数组名传递来的地址,有两个方法:

    ①用指向变量的指针变量。

    ②用指向一维数组的指针变量。

    C语言 | 输出斐波那契前30列mp.weixin.qq.com
    ba1b356a44cce551accfa7d191b4c9db.png
    展开全文
  • 指针引用数组

    2015-04-12 15:52:00
    引用数组元素时指针的运算  在一定条件下可以对指针进行加减运算  在指针指向数组元素时,可以对指针进行一下运算  加一个整数或减一个整数  自加运算和自减运算 两个指针相减,(只有p1和p2都指向同...
  • 01数组元素的指针1、指针变量既可以指向变量,也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。2、引用数组元素可以用下标法,也可以用指针法,...02在引用数组元素时指针的运算1、在一定条件下允许对指...
  • Java数组元素为基本数据类型,数组中的所有元素都是基本数据类型, Java数组元素引用类型,数组中的所有元素都是对象。
  • 基本数据类型的数组,数组元素是基本数据类型 引用类型的数组,数组元素是对象的引用
  • 引用数组

    2019-09-29 19:03:02
    引用数组: 1.引用数组在语法上和基本数据类型数组是没有区别的 2.多维数组其实也时引用数组 3.引用数组存放的是对象的引用,而基本数据类型...否则,当调用数组元素(对象),会产生NullPointerException(空指针异常) ...
  • 如题,今天笔者在使用map函数发现很多教程文档并没有说清楚其中的一个细节,比如对于map函数的说明,菜鸟教程提到 注意:map() 不会改变原始数组。 比如以下例子: var array1 = [1, 4, 9, 16]; // pass a ...
  • ②在引用数组元素时指针的运算 ③通过指针引用数组元素 ④用数组名作函数参数 ⑤通过指针引用多维数组 ①数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址 指针变量可以...
  • Java数组元素引用类型,数组中的所有元素都是对象。 基本数据类型和引用数据类型的区别: 基本数据类型在被创建,在栈上给其划分一块内存,将数值直接存储在栈上; 引用数据类型在被创建,首先要在栈上给其...
  • 二维数组元素指针引用 指针与一维数组和二维数组 1.定义 2.关系 3.数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的...
  • Linux $* $@ 参数引用数组元素引用

    千次阅读 2012-06-05 10:51:13
    参数引用 1. $*=$@="$@“ 其作用相同,使用for...数组元素引用 1. ${ar[*]}=${ar[@]}=”${ar[@]}“ 其作用相同,使用for循环可以读取每一个数组元素 2. “${ar[*]}” 是将所有数组元素看成一个序列,使用fo
  • 通过指针引用数组

    2019-10-01 15:06:36
    (一)引用数组元素时指针的运算 如果指针变量p已指向数组中的一个元素,则p+1指向同一数组的下一个元素,p-1指向同一数组的上一个元素。 附:P+1并不是简单将值+1,而是加上元素所占的字节数。 int、float、long...
  • public class Array { ...// 以下3行可以写到数组花括号内 // Animal a = new Animal(); // Mammal m = new Mammal(); // Cat c = new Cat(); Animal[] animals= {new Animal(), new Mammal(), n.
  • 数组元素那点事

    2016-11-02 22:55:16
    数组的下标表示 下标法是通过数组元素的下标直接直接引用数组元素。数组由同类型的一系列元素组成,每个元素都有自己的下标,使用数组
  • Java数组元素

    2017-03-22 09:10:54
    可以使用括在括号中的元素索引来引用访问数组的每个元素。第一个元素的索引为0,第二个元素1,第三个元素2等。 这称为基于零的索引。...引用数组的不存在元素会引发一个运行错误。 例如,在代码中使用myID
  • 对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中。 如: int[] a1={1,2,3,4,5}; 引用类型数组的数组元素...
  • 56.数组元素引用

    2012-09-12 09:21:55
    可以通过数组名和数组索引来引用一个数组元素。   数组索引可以是一个整数或者一个整数表达式。   注意,数组的索引从0开始到数组长度减1,比如,数组长度为n,则索引的范围为0~(n-1)。 例如,由一个名为arr...
  • ...包含引用对象的数组是浅拷贝,改变其中一个数组引用对象,另一个数组也会跟着改变。 一、数组浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份. 如下代码,...
  • 当Java数组元素引用类型数组中存放的是对象的引用,而不是对象本身。如下面的代码:   public class Test { public static void main(String[] args) { StringBuffer buffer = new StringBuffer("...
  • **17.java数组元素类型为基本数据类型和元素引用类型,有什么不同-** java的数组元素类型为基本数据类型和元素引用类型,有什么不同呢? 如下: 如果你声明的是基本数据类型的数组,那各元素都是基本数据类型,...
  • Java方法调用数组,是否改变原数组元素的总结 //个人理解, 欢迎吐槽 注意String是引用型变量, 我的理解也就是指向型, 指向一个数据或变量, 画图理解最容易, string 指向的 数据的值是不可改变的, string类型...
  • 但当数组元素是对象,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现。 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致所有元素都相等,这时判断方法...
  • 近日,在复习数组排序,定义了一个数组位置交换的wrongSwap方法,发现不可行,后来发现是java值传递和引用传递的问题。import java.util.Arrays; public class RankArr { public static void main(String[] args) ...
  • 修改数组元素

    2006-12-12 20:49:00
    将对象赋给这种数组中的元素时,将创建一个到该对象的引用。移动数组中的值,是在重新指定引用,而不是将值从一个元素复制到另一个中。对于基本数据类型的数组(如int或float),这种操作实际上是将值从一个元素复制...
  • fastJson数组添加元素时禁用循环引用

    千次阅读 2017-03-29 17:22:33
    当使用fastJson,在JSONArray中add多个json对象,若各json中存在相同元素,则会出现ref{…}表示的循环引用,想要禁止循环引用,则对加入JSONArray中的每个元素进行如下转换,再add到JSONArray即可。 String str =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,559
精华内容 1,023
关键字:

引用数组元素时