[Pointer]C中指针与多维数组学习

原创 2015年07月11日 00:18:13
   问题描述:C中指针的用法非常灵活,合理使用指针可以避免副本拷贝等。多维数组与指针的结合使用有时可以带来许多方便。
   指针处理多维数组的行:这个处理相对简单,以二维数组为例,
int a[ROW][COL]={};
int *p;
   要用p指向a的某一行,使用p=a[i]即可。
   指针处理多维数组的列:比行处理稍复杂,因为数组是按行存储而非列。以二维数组为例,
#include <stdio.h>

int main(void) {
    int a[3][4]={0};
    int i,j;
    int (*p)[4];
   for(p=a;p<=&a[2];p++)
       (*p)[2]=8;
   for(i=0;i<3;i++)
       for(j=0;j<4;j++)
          printf("%d, ",a[i][j]);
    return 0;
}
    运行结果:
0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 
    这里用到了数组指针,int(*p)[4];为一个指向长度为4的一维数组的指针,二维数组a[3][4]的每一行都是长度为4的一维数组,因此可以将数组指针指向每一行的地址,然后用(*p)[2]=8;为指向的一维数组的第三个元素赋值8,这样即实现了对二维数组的列的操作了。
   多维数组名与指针:以二维数组为例,如a[ROW]{COL},数组名a此时是指向指针的指针,多维数组的理解可以参照一维数组,此时可将a看成是一个一维数组,但是每个元素也是一个一维数组,因此a就是指向其第一个一维数组元素的指针,即(*)[COL],此时(*a)[0]就是a[0]了:
#include<stdio.h>

int main(void)
{
    inti,j;
    inta[3][4]={0};
    int(*p)[4];

    //二维数组初始化
   for(p=a;p<=a+2;p++)
      for(i=0;i<4;i++)
          (*p)[i]=i;

    //二维数组打印
   for(p=a;p<=a+2;p++)
      for(i=0;i<4;i++)
          printf("%d, ",(*p)[i]);

    //打印**a
   printf("\n **a %d\n",**a);

    //利用数组名作为指针打印数组元素
   for(i=0;i<3;i++)
      for(j=0;j<4;j++)
          printf("%d, ",*(*(a+i)+j));
}
   运行结果:
0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,
 **a 0 
0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,
版权声明:本文为博主原创文章,未经博主允许不得转载。

赋值运算符函数的注意事项 ,指针和多维数组的讨论 (c/c++)

1.赋值运算符函数String & String::operator = (String & str) { if(this == &str) return *this; ...

深入浅出C指针(三)多维数组

1.概念 如果某个数组的维数不止1个,它就被称为多维数组。例如,下面这个声明: int matrix[6][10]; 创建了一个包含60个元素的矩阵。但是,它是6行每行10个元素,还是10行每行...
  • aksnzhy
  • aksnzhy
  • 2012年03月23日 10:26
  • 4316

C/C++指针与多维数组的关系

从二维数组切入分析int a[3][4];我们都知道,数组名就是数组的首地址,那么具体这个首地址(指针)是怎样的类型呢? 我们可以做一个实验,让编译器来告诉我们。#include int main(...

c指向多维数组的指针

1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 3、数组与指针的关系是因为数组下标操作符[]...

学习笔记---多维数组及多级指针的使用

多维数组使用 多维数组做函数参数

C提高——数组、数组数据类型、数组数据类型指针、多维数组本质等

数组int main() { int a[200] = { 0 }; printf("a=%d\n", a); printf("&a=%d\n", &a); printf...

C/C++中传递多维数组的各种方法

  • 2008年11月29日 11:01
  • 48KB
  • 下载

C语言学习笔记(19) 多维数组和多维指针分析

摘要:总结了指向指针的指针的用法,以及这样使用的意义,分析了二维数组名,二维数组和二级指针的用法,文中用多个相关实例加深理解。 一、指向指针的指针     我们都知道,指针其实也是一个变量,只是里...

C++ for循环 纯指针遍历多维数组

指针是C/C++中很重要的一个概念,对指针操作熟悉的人,一般对程序对内存的访问和使用都比较敏感,多了解底层是很有益处的。一直都使用下标(subscript)来访问数组。一起来尝试用指针吧 !     ...
  • Ace_Yom
  • Ace_Yom
  • 2015年10月08日 17:54
  • 2248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Pointer]C中指针与多维数组学习
举报原因:
原因补充:

(最多只允许输入30个字)