为什么二维数组可以以一维数组的形式输出呢?麻烦说得详细、清楚点啊,拜托了~~~

下面代码中的point明明是二维数组可是输出时却是一维的形式?为什么可以这样呢
#include<stdio.h>#include<stdlib.h>
#include<time.h>
int players[13];
int randvalue[52];
int main()
{
void Sort();
void Order();
void Output();
int count;
srand(time(NULL));//种子

//一共4个人,所以循环4次 for(count = 1;count <= 4;count++)
{
Sort();//发牌给各个人
Order();//排序
printf("Player%d: ",count);
Output();//输出
printf("\n");
}
}

void Sort(){
int i,pai;
for(i = 0;i < 13;i++)
{
pai = 1 + (int)(rand()%52);//产生1~52的随机数,设1~13为红桃A~K,14~26为黑桃A~K,27~39为方块A~K,40到52为梅花A~K
while(randvalue[pai])
{
pai = 1 + (int)(rand()%52);
}//如果产生相同的随机数,则重新随机发牌,直到产生新的随机数
randvalue[pai] = 1;//标志已产生的随机数
players[i] = pai;
}
}

void Order(){
int k1,k2,temp;
for(k1 = 0;k1 < 12;k1++)
{
for(k2 = 1;k2 < 13;k2++)
{
if(players[k2] < players[k2 - 1] )
{
temp = players[k2];
players[k2] = players[k2 - 1];
players[k2 - 1] = temp;
}
}
}//用冒泡法给产生的随机数排序
}
void Output()
{
int i,num1,num2;
char kind[] = {'h','s','d','c'};//将花色储存在数组kind里
char point[13][3] = {"A","2","3","4","5","6","7","8","9","10","J","Q","k"};//将牌的点数储存在数组point中
for(i = 0;i < 13;i++)
{
num1 = (players[i] - 1) / 13;//判断牌的花色
num2 = (players[i] - 1) % 13; //判断牌的点数
printf("%c%-3s ",kind[num1],point[num2]);
}
}

因为,C的数组是以a[x][y]的形式的,它不像pascal是a[x,y]的,pascal那种是并列关系,但是C语言不是,如果画关系图,pascal是个长方形,C就是个树状图。a[x]是个变量,a也是个变量,a[x]是a的一部分,而a[x][y]又是a[x]的一部分,如果按1维输出的话,它是把a[x]看成一个整体,它的内容也就是a[x][0~y-1]
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-11
%s需要一个字符串的首地址作为参数,point[][]是二维数组,point[]就是每行元素的首地址,上面的point[num2]相当于&(point[num2][0])。本回答被网友采纳
相似回答