精华内容
下载资源
问答
  • 通过指针引用数组元素 引用一个数组元素,可以用:  (1) 下标法,如a[i]形式;  (2) 指针法,如*(a+i)或*(p+i)  其中a是数组名,p是指向数组元素的指针变量,其初值p=a 例子 —— 输出...

    通过指针引用数组元素

    引用一个数组元素,可以用:
      (1) 下标法,如a[i]形式;
      (2) 指针法,如*(a+i)或*(p+i)
      其中a是数组名,p是指向数组元素的指针变量,其初值p=a

    例子 —— 输出数组中的全部元素
    假设有一个a数组,整型,有10个元素。要输出各元素的值有三种方法
    (1)下标法

    #include <stdio.h>
    void  main()
    { int a[10];
       int i;
     for(i=0;i<10;i++)
      scanf("%d",&a[i]);
         printf("\n");
     for(i=0;i<10;i++)
      printf("%d",a[i]);
      }
    

    (2) 通过数组名计算数组元素地址,找出元素的值

    #include <stdio.h>
    void main()
    {  int a[10];
       int i;
     for(i=0;i<10;i++)
      scanf("%d",&a[i]);
      printf("\n");
      for(i=0;i<10;i++)
       printf("%d",*(a+i));
    }
    

    (3) 用指针变量指向数组元素

    #include <stdio.h>
    void  main()
    {int a[10];
      int  *p,i;
        for(i=0;i<10;i++)
         scanf("%d",&a[i]);
        printf("\n");
       for(p=a;p<(a+10);p++)
       printf("%d",*p);
    }
    
    展开全文
  • 1.数组指针:即指向数组的指针 ...2.通过指针引用数组元素的基本方法 (1)小标法:a[i]。 (2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p=a,p是指向数组元素的指针变量。 问:为什么*

    1.数组指针:即指向数组的指针
    那么, 如何声明一个数组指针呢?

    int (* p)[10]; /*括号是必须写的,不然就是指针数组;10是数组的大小*/

    拓展:有指针类型元素的数组称为指针数组。
    2.通过指针引用数组元素的基本方法
    (1)小标法:a[i]。
    (2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p=a,即p指向数组a首元素的地址。
    问:为什么* (a+i) 和* (p+i)是等价的,或者说是引用的同一个数组元素呢?
    答:在C语言中,数组名代表的是数组中首元素的地址。在程序编译时,a[i]是按*(a+i)处理的,即按数组元素的首地址加上相应位移量i找到新元素的地址。而p=a,即p是指向数组a的首元素的地址,因此是等价的。从这里可以看出,[ ]实际上是变地址运算符,即将a[i]按a+i计算地址,然后找此地址单元中的值。
    问:为什么p[i] 和* (p+i)是等价的,或者说是引用的同一个数组元素呢?
    答:C语言规定,当指针变量指向数字元素时,指针变量可以带下标。而在程序编译时,对此下标处理的方法是转换为地址,即对p[i] 处理成 (p+i)。同上,[ ]是变址运算符。
    3.利用指针引用数组元素
    (1)p++; *p;
    (2)*p++;等价于*(p++);因为++和*的优先级一样,故结合方向是从右向左。
    (3)*(p++);和*(++p);二者是有区别的。前者是先取*p的值,然后p加1;后者是先p加1,再取p的值。即如果p指向的是数组a元素a[0],则前者得到a[0]的值,后者得到a[1]的值。
    (4)++(*p);将p指向的元素的值加1。
    (5)如果p指向元素a[i],
    *(p--);先得到p指向的地址的元素a[i],然后p减1。
    *(++p);执行结果得到a[i+1],p加1。
    *(–p);执行结果得到a[i-1],p减1。

    4.利用指针输出数组元素

    int a[10];
    int * p;
    p = a;
    while(p<a+10)
    printf("%d",*p++);

    int a[10];
    int * p;
    p = a;
    while(p<a+10)
    {
       printf("%d",*p);
       p++;
    }

    int a[10];
    int * p;
    p = a;
    for(i=0;i<10;i++)
    printf("%d",*p++);

    int a[10];
    int * p;
    for(p=a;p<a+10;p++) /*比较专业的写法,代码简洁、高效*/
    printf("%d",*p);

    思考:下面代码能不能正确输出数组元素的值呢?

    int a[10];
    int * p;
    for(p=a;p<a+10;a++) 
    printf("%d",*a);

    答:是不行的。因为数组名a代表的是数组首元素的地址,是一个指针型常量,它的值在程序运行期间是不改变的,即a++是不变的。

    因此,结合动态分配数组,我们可以建立一个一维的数组指针:

    int (* array)[N]=(int *)malloc(N*sizeof(int));
    展开全文
  • 通过指针引用数组元素 ④用数组名作函数参数 ⑤通过指针引用多维数组 ①数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址 指针变量可以指向数组元素(把某一元素的地址放...

    大纲浏览

    ①数组元素的指针
     ②在引用数组元素时指针的运算
     ③通过指针引用数组元素
     ④用数组名作函数参数
     ⑤通过指针引用多维数组
    

    ①数组元素的指针

    一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址

    指针变量可以指向数组元素(把某一元素的地址放到一个指针变量中)

    所谓数组元素的指针就是数组元素的地址

    注意:
    p=&a[0]等价于p=a(p的值是数组a首元素a[0]的地址)在这里插入图片描述在这里插入图片描述

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

    在指针指向数组元素时,允许以下运算:
    加一个整数(用+或+=),如p

    展开全文
  • 通过指针引用数组

    千次阅读 2018-06-13 20:49:32
    1、指针是什么? 为了说清楚什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的。 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据程序中定义的...

    1、指针是什么?

      为了说清楚什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的。

      如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。例如,Visual C++为整型变量分配4个字节,对单精度浮点型变量分配4个字节。内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的内存单元中存放的数据则相当于旅馆房间中居住的旅客。由于通过地址可以找到所需的变量单元,可以说,地址指向该变量单元,也将地址形象化地称为“指针”,意思是通过它能找到以它为地址的内存单元。

      请务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别,假设程序已定义了3个整型变量i,j,k,在程序编译时,系统可能分配地址为2000~2003的4个字节给变量i,2004~2007的4个字节给j,2008~2011的4个字节给k,如下图:


    2、定义指针变量

      类型名 * 指针变量名;

      如:int * pointer_1, * pointer_2;

      也可在定义指针变量时,同时对它初始化,int * pointer_1=&a, * pointer_2=&b;

    左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。

     注意:

    (1)指针变量前面的“*”表示该变量的类型为指针型变量指针变量名是pointer_1和pointer_2,而不是* pointer_1和* pointer_2。

    (2)在定义指针变量时必须指定基类型。因为不同类型的数据在内存中所占的字节数和存放方式是不同的。后边还会讲到指针的移动和指针的运算(加减),例如“使指针移动一个位置”或“使指针值加1”,这个1代表什么呢?如果指针是指向一个整型变量的,那么“使指针移动1个位置”意味着移动4个字节,“使指针加1”意味着使地址值加4个字节。如果指针是指向一个字符变量的,则增加的不是4而是1.

    (3)如何表示指针类型。指向整型数据的指针类型表示为“int * ”,读作“指向int的指针”或简称“int指针”,可以有int * ,float * ,char * 等指针类型。

    (4)& 取地址运算符。&a是变量a的地址。

       * 指针运算符,* p代表指针变量p指向的对象。

    3、通过指针引用数组

    所谓数组元素的指针就是数组元素的地址。

    引用数组元素可以用下标法(如a[3]),也可以使用指针法,即通过指向数组元素的指针找到所需的元素,使用指针法能使目标程序质量高,(占内存小,运行速度快)。

    在C语言中,数组名代表数组中首元素(即序号为0的元素)的地址,因此,下面两个语句等价:

    p = &a[0];   //p的值是a[0]的地址

    p = a;    //p的值是数组a首元素(即a[0])的地址

    注意:数组名不代表整个数组,只代表数组首元素的地址。

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

    在一定条件下允许对指针进行加和减的运算。在指针指向数组元素时,可以对指针进行以下运算:

    • 加一个整数(用+或+=),如p+1;
    • 减一个整数(用-或-=),如p-1;
    • 自加运算,如p++, ++p;
    • 自减运算,如p--,--p。
    • 两个指针相减,如p1-p2(只有p1和p2都指向同一个数组中的元素时才有意义)

    分别说明如下:

    (1)如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,p-1指向同一个数组中的上一个元素。执行p+1时并不是将p的值(地址)简单地加1,而是加上一个数组元素所占用的字节数。例如,数组元素是float型,每个元素占用4个字节,则p+1意味着使p的值加4个字节,以使它指向下一个元素。

    (2)如果p的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址,或者说它们指向a数组序号为i的元素。

    (3)*(p+i)和*(a+i)是p+i或a+i所指向的数组元素,即a[i]。例如,*(p+5)或*(a+5)就是a[5],即这三者等价。

    (4)如果指针变量p1和p2都指向同一数组,如执行p2-p1,结果是p2-p1的值(两个地址之差)除以单个数组元素的长度。表示p1和p2所指元素的相对距离,两个地址不能相加,如p1+p2是无实际意义的。

    例如:通过指针变量指向数组元素:

    #include <stdio.h>
    int main()
    {
        int a[10];
        int * p, i;
        printf('Please enter 10 integer numbers:");
        for(i=0;i<10;i++)
          scanf("%d", &a[i]);
        for(p=a;p<(a+10);p++)
          printf("%d", * p);   //用指针指向当前的数据元素
        printf("\n");
        return 0;
    }

    4、二维数组a的有关指针

    int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};

    表示形式含义地址
    a二维数组名,指向一维数组a[0],即0行首地址2000
    a[0], * (a+0), * a0行0列元素地址2000

    a+1,&a[1]

    1行首地址2016
    a[1], *(a+1)1行0列元素a[1][0]的地址2016
    a[1]+2, * (a+1)+2, &a[1][2]1行2列元素a[1][2]的地址2024
    *(a[1]+2), *(*(a+1)+2), a[1][2]1行2列元素a[1][2]的值元素值为13


    展开全文
  • #include <stdio.h>int main() { int a[10]; int i; printf("place enter 10 integer number:"); for (i = 0; i ; i++) { //scanf("%d", &a[i]); /*使用数组下标法实现*/ scanf("%d",
  • 1.字符串引用方式 ...(2)用字符指针变量指向一个字符串常量,通过字符串指针引用字符串常量 char * string="I love China"; printf("%s\n",string); 2.字符指针作函数参数 (1)用字符数组名作为函数参数
  • 可以将指针指向数组的任意元素,然后从那里开始访问,只要注意不越界就行了,这说明数组只是将元素连续堆叠,并不需要也没有其他的配置信息存放在数组元素之外的地方或者在头尾等等任何地方,都没有,他只是连续的...
  • C语言指针引用数组

    千次阅读 2020-10-16 21:32:54
    前言:C语言中指针玩的是什么,是内存,要想学好指针的小伙伴们要先对数据在内存中是怎么玩的做一番了解~       当在程序中定义一个变量时,系统会根据其数据类型为其开辟内存空间,...
  • 输出数组中的全部元素(下标法):#include int main() { int a[10],i; for(i=0; i; i++) a[i]=i; ... printf("a[%d]=%d\n",i,a[i]);...输出数组中的全部元素通过数组名计算元素的地址,找出元素的值):#i
  • 通过指针引用数组元素-将数组a中n个整数按相反顺序存放 可参考: 两个顺序线性表的合并,关于数组指针的操作。 http://blog.csdn.net/jiezou007/article/details/7906606 参考:字符串的反转,...
  • c语言_指针引用数组元素并打印输出

    千次阅读 2016-07-22 20:04:48
    c语言_指针引用数组元素并打印输出 #include void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4]; int row,col; p=a; /*指针p指向元素为4的数组*/ /*打印输出数组指针p指向的...
  • 指针引用数组元素并打印输出

    千次阅读 2015-07-21 07:50:36
    在上面的程序中,共有四个for循环,其中第一个for循环是利用数组下标访问数组的元素,第二个for循环是使用数组名访问数组元素。在C语言中,地址也可以像一般变量一样进行加减运算,但是指针的加1和减1表示的是一个...
  •   C语言指针基础知识点(四)–通过指针引用数组   C语言指针基础知识点(五)–用数组名作函数参数 通过指针引用多维数组 1. 多维数组元素的地址 请记住: *(a+i) 和 a[i] 是等价的 如果 a 是一维数组名,a...
  • 二维数组元素指针引用 指针与一维数组和二维数组 1.定义 2.关系 3.数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的...
  • 通过指针引用数组元素 引用一个数组元素,可以用以下两种方法: 1.下标法,如 a[i] 形式; 2.指针法,如 *(a+i)或 *(p+i)。其中 a 是数组名,p是指向数组元素的指针变量,其初值为 p=a; 栗子: 有一个整...
  • C++指向数组元素指针 在C++中,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址;指针变量既然可以指向变量,也可以指向数组元素,所谓数组元素指针就是数组...
  • C语言程序设计教案 章节名称 通过指针引用多维数组 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 星期 节次 授课进度 ?符合 超前 滞后 ?符合 超前 滞后 ?符合 超前 滞后 教学目标 知识目标 1.理解二维...
  • C语言:用指针访问数组元素

    万次阅读 多人点赞 2017-07-28 11:38:56
    知识点1:用指针访问数组元素: 单独输出数组的名字就是相当于输出数组首元素的地址!= 数组的名字代表数组首元素的地址 int a[10]={1,2,3,,4,5,6,7,8,9,10}; int *p;//先声明指针变量 p=&a[0]//然后将指针赋予...
  • 在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量...
  • 引用数组元素

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 178,292
精华内容 71,316
关键字:

通过指针引用数组元素