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、传递给函数的数组参数在行为上就像它们是通过传址调用的那样(实际是传值调用)。

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/Lunais/p/7234256.html
Copyright © 2011-2022 走看看