zoukankan      html  css  js  c++  java
  • 指向二维数组元素的指针变量

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

      例1.有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值.

      编写程序

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 };
     5     int *p;
     6     for (p = a[0]; p < a[0] + 12; p++)   //a[0]代表列指针的起点,p依次指向下一个元素
     7     {
     8         if ((p - a[0])%4 == 0)
     9         {
    10             printf("
    ");            //%4 ==0,先换行再输出元素
    11         }
    12         printf("%4d  ", *p);
    13 
    14     }
    15     return 0;
    16 }

      本例是顺序输出数组中各元素之值.若要输出指定的某个数值元素(如a[2][3]),可以通过相对位置来计算.a[i][j]在数组中的相对位置的计算公式为i*m+j.所以a[2][3]的地址是(p+2*4+3),即(p+11).

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

      上例中p是int * p,指向整形数据,p+1所指元素是p所指列元素的下一个元素.

      可以改用另一种方法,使p指向一个包含m个元素的一维数组.这时,如果p先指向a[0](即p=&a[0]),则p+1指向a[1],p的增值以一维数组的长度为单位.如下图

          

      例2. 输出二维数组任一行任一列元素的值.

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 };
     5     int(*p)[4], i, j;
     6     p = a;        //p指向二维数组的0行
     7     printf("please enter row and colum:");
     8     scanf_s("%d,%d", &i, &j);    //2个%d之间的分隔符要和输入时的保持一致
     9     printf("a[%d][%d] = %d",i, j, *(*(p + i) + j));
    10     return 0;
    11 }

        程序分析:程序第5行中的int(*p)[4]表示定义p为一个指针变量,它指向包含4个整型元素的一维数组.注意*p两侧的括号不可缺少,如写成*p[4],则代表指针数组.

      对(*p)[4]的理解,可以做出下面的比较:

      ①int a[4];(a有4个元素,每个元素为整型)

      ②int (*p)[4];(可理解为*p是int[4]类型,指向含有4个元素的数组的指针)

      第②种形式表示 (*p)有4个元素,每个元素为整型.也就是p所指向的对象是有4个整型元素的数组,即p是指向一维数组的指针.p的值是该一维数组的起始地址.

      注意p的类型是int (*)[4],p指向的一维数组的长度是16字节,所以p每增加1,地址就增加16字节.

      

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    正则表达式
    浏览器 User-Agent 大全
    python3爬虫开发实战 第六课 爬虫基本流程
    python3爬虫开发实战 第五课 常用库的安装
    python3爬虫开发实战 第四课 MySQL
    python3爬虫开发实战 第三课 Redis数据库
    python3爬虫开发实战 第二课 MongoDB安装
    python3爬虫开发实战 第一课 python安装和Pycharm安装
    批处理——数据库
    Aop所需包
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/7380755.html
Copyright © 2011-2022 走看看