关于二维数组测试浅析

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

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

废话少说了,

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

#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]
前者速度占优
后者内存占优
希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值