注册 登录
编程论坛 C++教室

一个关于二维数组的问题 概念有点乱

wzboyer 发布于 2009-11-10 22:12, 826 次点击
比如char a[10][20];
是不是 定义一10个二维数组啊,每个数组的长度是20个字符呢?
还是什么其它的啊  我二维数组没看懂啊 书上就写一页 。。。。。




刚开始是理解为 定义了200个变量。。。。。。  分别为a[0][0].....a[10][20]
可是老师上课举了下面这个列子后我有点混乱

题目 :输入十个字符串比较大小
程序:
#include "stdio.h"
#include "string.h"
void main(){
char b[20],a[10][20]; 就这句
int i,j;
printf("input:\n");
for(i=0;i<9;i++)
gets(a[i]);
for(i=0;i<9;i++){
for(j=i+1;j<9;j++){
if(strcmp(a[i],a[j])>0){
strcpy(b,a[j]);
strcpy(a[j],a[i]);
strcpy(a[i],b);
}
}
}

for(i=0;i<9;i++)
puts(a[i]);
}
那上面这道题的char a[10]20]这句话完全没必要用二维数组啊  改成定义一个一维数组char a[10]不就行了???
上课老师好像是说char a[10]20]这句话 的意思  是   定义10个变量  每个变量长度为20.。。。。。
有点晕
5 回复
#2
qlc002009-11-10 23:05
二维数组比如说char a[10][20],它相当于定义了十个字符串,而每个字符串的长度是20.a[i]表示的是第i行的字符串的全部!如果你改成定义一个一维数组char a[10]那么它只相当于一个字符串,而其他的九个就不能表示了!
#3
quietstar2009-11-10 23:25
楼上正解!
#4
newCpp2009-11-11 13:07
这个表示10行20列
你这样想就可以了!
那么10*20就等于200
如果是整形的话那么他就可以输出来200个整形数字!
个数不满足200的话,用0补充!
你可以将这个字符型的改成整形的这样你理解起来应该会更方便点儿!
#5
一旋无风2009-11-11 14:05
回复 楼主 wzboyer
二维数组比如说char a[10][20],它相当于定义了十个字符串,而每个字符串的长度是20.a[i]表示的是第i行的字符串的全部!如果你改成定义一个一维数组char a[10]那么它只相当于一个字符串,而其他的九个就不能表示了! 是这样的,很对,比如说 你要处理10个学生的姓名,这10个姓名就应该用二维数组存放,若要按姓氏升序排列姓名,用一维岂不是很乱,且不直观?比如:
#include<stdio.h>
#include<string.h>
void main()
{
char name[10][20];
printf("请输入10个姓名:\n");
for(int i=0;i<10;i++)
scanf("%s",name[i]);
char temp[20];
for(i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
if(strcmp(name[i],name[j])>0)
{
strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
}
}
printf("姓名按姓氏升序排列为:\n");
for(i=0;i<10;i++)
printf("%s",name[i]);
}







#6
小兰012009-11-11 18:16
二维数组就是线形代数中的矩阵.
1