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

    如何使用指针对二维数组进行遍历?

    首先我们需要明确的是:二维数组在内存中是连续的,比如一个二维数组int a[2][3]={1,2,3,4,5,6},可以视作是两个一维数组构成的,即int a0[3] ={1,2,3},int a1[3] = {4,5,6},我们知道,一维数组在内存中是连续的一块内存,并且数组名a0,a1代表的就是该数组首元素的地址,而正因为二维数组的内存中的地址也是连续的,所以a1的首元素的地址就为a0数组首元素的地址+a0中元素的个数,因此,我们就可以通过让指针不断+1来访问其中的每一个元素,不用再考虑行与列的限制。

    #include<stdio.h>
    #include<iostream>
    
    //利用指针来遍历二维数组
    void printArr(int *p,int m,int n) {
        for (int i = 0; i < (m * n); i++) {
            if (i != 0 && i % n == 0) {
                printf("
    ");
            }
            printf("%d ", *(p + i));
        }
        putchar('
    ');
    }
    
    int main() {
        int a[2][3] = { {1,2,3},{4,5,6} };
        int m = sizeof(a) / sizeof(a[0]);
        int n = sizeof(a[0]) / sizeof(a[0][0]);
        printf("数组的行:%d 数组的列:%d
    ",m, n);
        printArr(a[0],m,n);
        system("pause");
        return 0;
    }

    输出:

     需要注意以下几点:

    (1)使用int m = sizeof(a) / sizeof(a[0]); int n = sizeof(a[0]) / sizeof(a[0][0]);来获取数组的行与列。

    (2)传入printArr中的是二维数组首元素的地址,也就是第一个一维数组的首元素的地址,也就是其名字。

    (3)遍历时让指针p一直向后移动到二维数组的末尾,可以看做将二维数组展开成一维数组,再计算移动的次数。

    (4)当访问到的位置是列的整数倍时,进行换行,方便显示。

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12120432.html
Copyright © 2011-2022 走看看