关于二维数组测试浅析

来源:互联网 发布:智能家居网络拓扑图 编辑:程序博客网 时间:2024/05/29 07:51

今天在聊天中有一个问起来关于数组的问题,

自己就是挺喜欢帮助朋友们解决问题的,也不是为了什么。帮助朋友真心觉得高兴。

废话少说了,

先看下面代码,看完代码然后解释,或许过于简单,但是我觉得很有意义,就写在这里记录下。

#include"stdafx.h"#include <stdio.h>char *change(char s[ ][20], char t[ ]);int main(void){    int i;    char s[4][20], t[10], *p;              //申请一个4行20列的二维数组,和一个10的一维数组,和char类型指针    printf("请输入  ");for(i = 0; i < 4; i++)scanf("%s", s[i]);                  //向每行中存入字符串p = change(s, t);printf("%s\n", p);    return 0;}char * change(char s[ ][20], char t[ ]){    int i;    for(i= 0; i < 4; i++) {        t[2*i] = s[i][0];    t[2*i+1] = s[i][1];//printf("%s\n",t[2*i]);//printf("%s\n",t[2*i + 1]);    } t[2*i] = '\0'; return t;}  

单步调试,然后想起来在学校的时候经常遇到这样的问题来,估计问问题的也是在上学。

解释代码中的几个关键地方:

第一:二维数组么,就是数组的数组,双重数组。看这里的s数组就是一共有4条,每条20个的四个数组或者也叫做所谓的二维数组。

第二:t数组。带入一个值你就会觉得恍然大悟了,其实这里的t[2*i ]就是从0到9,就是正好10个数的一维数组。

最后,引用这里的一个解释,也挺有帮助:

关于二维数组有个对比
#define M 250
#define N 520

int a[M][N]; 对比int a[M * N];
说前者占用空间是int [M * N] + int *[M]
后者占用空间是int [M * N]
假设0 < i < M, 0 < j < N
访问a(i,j)
前者用 a[i][j]
后者用 a[i * M + j]
前者速度占优
后者内存占优
希望对大家有所帮助。

原创粉丝点击