今天在聊天中有一个问起来关于数组的问题,
自己就是挺喜欢帮助朋友们解决问题的,也不是为了什么。帮助朋友真心觉得高兴。
废话少说了,
先看下面代码,看完代码然后解释,或许过于简单,但是我觉得很有意义,就写在这里记录下。
#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]
前者速度占优
后者内存占优
希望对大家有所帮助。