zoukankan      html  css  js  c++  java
  • 一维数组_二维数组

    1、数组名

    int vector[10];    //vector是一个指针,是一个指向数组首元素的指针。即指向整形的指针。

    int matrix[3][10];    //matrix是一个指针,是一个指向(有10个整形元素的)数组的指针。

    指向数组的指针的声明方式:

    int (*p)[10] = matrix;

    2、数组名做函数参数

    一维数组:

    int vector[10];
    void func1(int *vec);
    void func1(int vec[]);

    二维数组:

    int matrix[3][10];
    void func2(int (*mat)[10]);
    void func2(int mat[][10]);

    二维数组名做函数参数,mat的第1个下标根据(包含10个元素的)整形数组长度进行调整;

    第2个下标根据整形的长度进行调整。

    3、初始化

    二维数组缺省方式;

    int two_dim[][5] = {
         { 00, 01, 02},
         { 10, 11 },
         { 20, 21, 22, 23 }
    };

    总结:
    数组名一般表示指向该数组第1个元素的指针。在sizeof运算符和单目操作符&中例外:

    sizeof(array);    //表示整个数组所占用的字节

    单目操作符&返回一个指向数组的指针,而不是指向第1个元素指针的指针。

     除了优先级不同以外,下标表达式array[value]和间接访问表达式*(array+value)是一样的。

    指针和数组不同点:声明数组时,同时为其分配了内存空间,用于容纳数组元素;声明指针时只分配了用于容纳指针本身的空间。

    数组名做函数参数传递时,传递给函数的是指向数组第1个元素的指针。函数接收到的是实参的拷贝,所以对形参进行操作不会实参。但通过指针间接访问可以修改原先的数组元素。数组形参可以声明为数组,也可以为指针,只有它们做函数的形参时才相等。

     注:

    C函数的所有参数均以“传值调用”方式进行传递,这意味着函数将获得参数值的一份拷贝。这样函数可以放心修改这个拷贝值,而不必担心会修改调用程序实际传递给它的参数。但是如果被传递的参数是一个数组名,并且在函数中使用下标引用该数组的参数,可间接修改数组元素。

    数组参数的这种行为似乎与传值调用规则相悖。但其实并无矛盾之处——数组名的值实际上是一个指针,传递给函数的就是这个指针的一份拷贝。下标引用实际上是间接访问的另一种形式,它可以对指针执行间接访问操作,访问指针指向的内存位置。

    参数实际上是一份拷贝,但在这份拷贝上执行间接访问的是原先的数组。

    1、传递给函数的标量参数都是传值调用的

    2、传递给函数的数组参数在行为上就像它们是通过传址调用的那样(实际是传值调用)。

  • 相关阅读:
    redis概要学习
    http协议格式详解
    浅谈mysql
    linux常用命令
    Linux 程序管理
    认识与分析日志文件
    认识与学习bash
    例行任务管理
    软件安装的三大方法
    关于一些感慨
  • 原文地址:https://www.cnblogs.com/Lunais/p/7234256.html
Copyright © 2011-2022 走看看