精华内容
下载资源
问答
  • 正确定义二维数组

    万次阅读 多人点赞 2019-06-24 16:23:17
    对二维数组进行正确初始化 二维数组必须指定列数量,行数量可以不定义即可以省略第一维的定义,但不能省略第二维的定义 1.分行进行初始化 int a[2][3] = {{1,2,3},{4,5,6}}; 在{}内部再用{}把各行分分开,第0行...

    对二维数组进行正确初始化

    二维数组必须指定列的数量,行的数量可以不定义即可以省略第一维的定义,但不能省略第二维的定义

    • 1.分行进行初始化
      int a[2][3] = {{1,2,3},{4,5,6}};
      在{}内部再用{}把各行分分开,第0行的初值是1,2,3。第1行的初值是4,5,6。相当于执行:
      int a[2][3];
      a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;a[1][0] = 4;a[1][1] = 5; a[1][2] = 6;
    • 2.不分行初始化
      int a[2][3] = {1,2,3,4,5,6};
      把{ }中的数据依次赋给a数组各元素。
    • 3.为部分数组元素初始化:
      static a[2][3] = {{1,2}, {4}};
      第一行只有两个初值,按顺序分别赋给a[0][0] 和 a[0][1];第二行的初值4赋给a[1][0]。由于存储类型是static,故其他元素的初始值是0。ps:某些编译器,存储类型不是static的初始值也是0。
    • 4.可以省略第一维定义,但不能省略第二维定义
      a[][3] = {1,2,3,4,5,6};
      一般,省略第一维定义时,第一维的规则如下:
      初值个数能被第二位整除,所得的商就是第一维的大小,如果不能整除,第一维的大小为商 + 1。
    展开全文
  • 一维数组的动态定义很容易写 int *a=new int[X]; 但是二维数组 如果用 int **a=new int[x][y];...正确的做法是先声明一个n维数组,每个单元是指向...//动态定义二维数组的方法 for (int i = 0; i < M; i...

    一维数组的动态定义很容易写

    int *a=new int[X];

    但是二维数组 如果用

    int **a=new int[x][y];

    这就会出错
    正确的做法是先声明一个n维数组,每个单元是指向int的指针,再分别对每个单元分配内存.
    代码如下

    int **a = new int*[M];//动态定义二维数组的方法
        for (int i = 0; i < M; i++)
            a[i] = new int[N];

    矩阵相乘的计算方法是这里写图片描述
    所以可以用三个循环来解决此规则
    代码如下

    #include<iostream>
    using namespace std;
    int main()
    {
        int M, N;
        cin >> M >> N;
        int **a = new int*[M];//动态定义二维数组的方法
        for (int i = 0; i < M; i++)
            a[i] = new int[N];
        int**b = new int*[M];
        for (int j = 0; j < M; j++)
            b[j] = new int[N];  //两个动态二维数组定义完毕
    
        for (int m = 0; m < M; m++) //给数组a,b赋初值
            for (int n = 0; n < N; n++)
                cin >> a[m][n];
        for (int m = 0; m < M; m++)
            for (int n = 0; n < N; n++)
                cin >> b[m][n];
    
        int**c = new int*[M];
        for (int l = 0; l < M; l++)
            c[l] = new int[N];//定义第三个矩阵作为相乘后得到的矩阵
    
        int p, q,k;
        for (p = 0; p < M; p++)//矩阵的行
            for (q = 0; q < N; q++)//矩阵的列
                for (k = 0,c[p][q]=0; k < M; k++)//矩阵的行列之间在相乘时的关系 最终的矩阵与左侧矩阵的行有关
                    //注意c数组需要初始化!!!!!
                    c[p][q] += a[p][k] * b[k][q];//矩阵相乘
    
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < N; j++)
                cout << c[i][j]<<" ";
            cout << endl;
        }
    }

    在写此代码时 忘记了将c数组初始化 一开始得出c矩阵的所有数值都是乱码 要多多注意初始化问题(不能犯低级错误)!

    展开全文
  • Python中创建二维数组

    2020-12-25 10:38:18
    二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 ...一般Python中创建二维数组的方法是使用列表解析的方法 列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素 创建
  • 二维数组的数组名作为函数...其原因为:C编译器必须已知每列的长度,才能对二维数组元素进行正确的寻址操作,否则编译器无法确定第二行的数组元素从那里开始存取。例如,定义一个3行4列的二维数组,则接收这个二维...
    bdf44d5eda2c73b8d3bce22467f32e48.png
    64c50298206f5664b288fac7d0029ed4.png

    用二维数组的数组名作为函数的参数,向被调函数传递数组的起始地址,可以向函数复制全部数组元素所需的开销。与函数形参被声明为一维数组时所不同的是当形参被定义为二维数组的时候,不能省略数组第二维的长度,仅可以省略数组的第一维的长度。

    其原因为:C编译器必须已知每列的长度,才能对二维数组元素进行正确的寻址操作,否则编译器无法确定第二行的数组元素从那里开始存取。

    例如,定义一个3行4列的二维数组,则接收这个二维数组的函数add可以定义为:

    void add(int array[3][4])

    {

    ……

    }

    还可以定义为:

    viod add(int array[][4])

    {

    ……

    }

    但是绝对不能定义为:

    viod add(int array[][])

    {

    ……

    }

    其原因是C语言中的二维数组都是按列存储,编译器需要根据函数形参列表提供的列下标值(列数,即每行中的元素个数)来告诉函数如何在一个二维数组中定义一个数组元素。二维数组的一行实质上就是一个一维数组。为了在某个特定的行中找到某个元素,编译器就必须知道一行中有多少个元素,这样才能跳过适当数量的存储单元来准确地找到要访问的数组元素。

    因为二维数组的列数已经在方括号里指定,所以只要在参数中指定数组的行数即可。这样,在函数中访问二维数组的元素,只需要保证二维数组元素的行、列下标大于或等于0且小于数组的行数和列数即可。

    二维数组的运用例子:

    某班期末考试科目为数学(mt)、英语(en)和C语言(cl),有最多不超过30人参加考试。为评定奖学金,要求按如下格式输出学号、各科分数、总分和平均分,并且标出三门课均在90分(含90分)以上者(用“Y”和“N”来标注)。

    编写的程序如下:

    #include

    #defineSTUD30 //最多学生人数

    #defineCOURSE3 //考试科目数

    int input(long num[],int score[][COURSE]);

    voidtotal(int score[][COURSE],int sum,floataver[],int n);

    voidprint(long num,int score[][COURSE],int sum[],float aver[],int n);

    int main()

    {

    int n,score[STUD][COURSE],sum[STUD];

    longnum[STUD];

    floataver[STUD];

    n=input(num,score);

    total(score,sum,aver,n);

    print(num,score,sum,aver,n);

    return 0;

    }

    //函数用于输入参加考试学生的学号和COURSE门课程的成绩,函数返回参加考试的学生人数

    int input(long num[],int score[][COURSE]);

    {

    int i,j,n;

    printf("Please enter the total number of the students(n<=30):");

    scanf("%d

    展开全文
  • 二维数组和二级指针

    2016-03-06 14:58:22
    前两天写个程序,传参数的时候想传个二维数组进去,结果悲剧了,函数写成fun (int **p){},原来没有这么写过, 以为这么写也是的,结果错了,查...正确二维数组的指针应该是:int a[2][2];int (*p)[2];//定义时无

    前两天写个程序,传参数的时候想传个二维数组进去,结果悲剧了,函数写成fun (int **p){},原来没有这么写过,

    以为这么写也是对的,结果错了,查了些资料,做个总结。

    fun (int **p){}这里面的int **p //这里的p不是二维数组的指针,而是指向指针的指针,即二级指针。

    正确的二维数组的指针应该是:int a[2][2];int (*p)[2];//定义时无论数组维数,只可忽略第一维 

    例如:int a[2][2]={0,1,2,3};

    int **p=(int**)a;//强制将二维数组指针转为指向指针的指针

    则此时p[0]=0;p[1]=1;p[2]=2;p[3]=3; //这里也是碰巧了, 指针和int都是4字节,恰巧每次移动到了对应值得位置;如果换成别的类型,或者64位设备就不会这么巧了;

    而p[0][0]=*(*(p+0)+0)=**p;

    p[0][1]=*(*(p+0)+1);

    对于p[0][0]:由于*p=0; ====> **p=*(0);引用地址为零的内存,必然是错误的。

    对于p[0][1]=*(*p+1)====>*(4),引用了非法内存同样,

    对于p[1][0]=*(1),p[1][1]=*(5),均引用了非法内存所以说,二位数组并不能简单的转换成指向指针的指针。  

    二维数组其实只是一个指针,而二级指针是指向指针的指针,所以二者并不等价。如上例所示:int a[2][2];

     a是指向整个数组的首地址,并不是int **;所以不要指望向函数fun里面传实参 p=a;


     

     

    #include <iostream>

     

    void fun(char ** p)

    {

    char (*p1)[10] = (char(*)[10])p;

    std::cout<<p1[0][0]<<std::endl;

    }

     

    int main(int argc, char* argv[])

    {

    char data[][10] = {"abc","def"};

    fun((char **)data);

    return 0;

    }

    展开全文
  • 给结构体里定义的二维数组赋值

    千次阅读 2017-08-16 20:31:40
    这些小知识都是自己积累正确性经过本人亲自检验了 如果您也认为是对的,那么欢迎借鉴使用,如果有不对地方,希望能够指出错误,我将不胜感激
  • C语言C 072二维数组.ppt

    2020-04-19 10:11:13
    * (2)若定义int a[3][4],则a的正确引用是 A) a [ 2 ][ 4 ] B) a [ 1,3] C) a (2(1) D) a [1+1][ 0 ] (1)以下二维数组说明方式中正确的是 A) int a[3][ ]; B) float a(3,4; C) double a[1][4]; D) float a(3(4; ...
  • 为编写将二维数组作为参数函数,必须牢记,数组名被视为地址,因此相应形参是一个指针,比较难处理是如何正确声明指针。在被调用函数中形参数组定义时可以可以指定所有维数大小,也可以省略第一维大小...
  • 以下能对二维数组a进行正确初始化语句是()。 正确答案: B 你答案: D (错误) int a[2][ ]={{1,0,1},{5,2,3}}; int a[ ][3]={{1,2,3},{4,5,6}}; int a[2][4]={{1,2,3},{4,5},{6}}; int a[ ][3]={{1,0,1},{},{...
  • 正确写法: void Func(int array[3][10]);...用二维数组名作为实参或者形参,在被调用函数中形参数组定义时可以指定所有维数大小,也可以省略第一维大小说明。 二者都是合法而且等价,但是不...
  • 给定一个海拔平面图,相当于一个二维数组数组的每个元素表示一个点的海拔高度。请判断该图中是否存在鞍点,如果存在,则输出该鞍点的位置,即行、列坐标。 本题规定鞍点的定义为:该点的值在它所在的那行中...
  • 如题,最近在写代码时需要用到数组的数组这种结构体(a[m][n]),也许有人会说这不就是二维数组吗,非也,二维数组是C++里的概念,C语言没有二维数组的概念,正确的叫法就是数组的数组;但是因为我需要的空间不确定...
  • 二二维数组元素的使用 二维数组中元素相当于一个变量,我们可以象使用一个变量那样使用二维数组元素...a[1,3] C) a(5) D) a [10-10] 三二维数组的初始化 采用以下两种方法之一进行 1.类型说明符 数组名[行数][列数]={{数
  • 1. 引用数组元素时, 其数组下标数据类型允许是 整型常量或...3. 以下能对二维数组a 进行正确初始化语句是: A) int a[2][]={{1,0,1},{5,2,3}}; B) int a[][3]={{1,2,3},{4,5,6}}; C) int a[2][4]={{1...
  • A、整型、实型、逻辑型B、整型、实型、逻辑型、字符型C、整型、字符型、逻辑型D、整型、实型、字符型(16)对二维数组的正确定义是A.inta[][]={1,2,3,4,5,6};B.inta[2][]={1,2,3,4,5,6};C.inta[][3]={1,2,3,4,5,6};D....
  • 指针应用

    2019-01-23 14:10:20
    4.若有定义: int c[4][5],( *pc)[5]; pc=c; 那么,下列数组C的元素引用正确的是( )。...= c,表示pc指向二维数组的第一行,pc+1偏移一行,一行5个元素。*pc得到二维数组c的第一行数组的首地址,+2偏移到...
  • 问题1:以对二维数组的定义正确的是()。A.int a[4][]={1,2,3,4,5,6};B.Int a[][3];C.Int a[][3]={1,2,3,4,5,6}D.Int a[][] = {{1,2,3},{4,5,6}}定义二维数组时,若按一维格式初始化,则第一维的...
  • 例61:C语言求3*3整型矩阵角线元素之和 。 解题思路:程序中用数整型数组,运行结果是正确的。如果用是实型数组,只须将程序第4行int改为...//定义二维数组和变量 int i,j;//定义整型变量,主要用于for循
  • c++指针问题

    2016-05-23 21:41:17
    以下四种说法中,正确的一项是( )。 A.C++允许在字符串上进行整体操作 ...一维指针数组实际上是一个二维数组char vn[]="Brown" 有5个元素,但是会自动追加‘\0' 表示字符串终结。其实有6个长度。 指针是个变量 有
  • *1.26 main的正确定义是什么?void main正确吗? 44 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 44 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为...
  • (数组名表示数组的首地址,故可赋予指向数组的指针变量pa) 也可写为: pa=&a[0]; /*数组第一个元素的地址也是整个数组的首地址, 也可赋予pa*/ 当然也可采取初始化赋值的方法: int a[5],*pa=a; ⑤把字符串的首...
  • 1.26 main的正确定义是什么?void main正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? ...
  • *1.26 main的正确定义是什么?voidmain正确吗?  1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么?  1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为...
  • Java选择题

    2021-02-22 17:09:22
    1.下列关于Java类中方法的定义正确的是() 正确答案: D 你答案: D (正确) 若代码执行到return语句,则将当前值返回,而且继续执行return语句后面...2.已知 声明并初始化二维数组 int a[ ][ ]={{1,2},{3,4},{5
  •  *1.26 main的正确定义是什么?voidmain正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为...
  • 1.26 main的正确定义是什么?void main正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? ...
  • *1.26 main的正确定义是什么?voidmain正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? ...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

对二维数组的正确定义是