鱼C论坛

 找回密码
 立即注册
查看: 2061|回复: 4

一道二维数组元素引用的问题

[复制链接]
发表于 2016-8-6 15:26:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 百变kelvin 于 2016-8-7 14:17 编辑
#include<stdio.h>
void main()
{
        char a[5][10] = {"one", "two", "three", "four", "five"};
        int i, j;
        char t;
        for(i=0; i<2; i++)
        for(j=i+1; j<5; j++)
        if(a[i][0] > a[j][0])
        {
                t = a[i][0];
                a[i][0] = a[j][0];
                a[j][0] = t;
        }
        puts( a[1] );
}

程序的输出结果是 fwo

两个不理解

一是像这种给出字符串的二维数组,如a[0][0]这种是对应哪个字符串或者说对应哪个字符串的字母?

二是它要输出的是a[1],这是什么意思呢,怎么就得到fwo了?

还请大家多多指导一下,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-6 17:29:59 | 显示全部楼层
本帖最后由 廿文廿武 于 2016-8-6 17:32 编辑

楼主用的什么IDE,神了,你一步一步的调试就知道是什么回事了,前面的FOR循环只是把数组里的元素改来改去,循环结束后a[1]被改成fwo了,当然是输出这个结果了。
#include <stdio.h>

int main()
{
        char a[5][10] = { "one","two", "three", "four", "five" };
        int i, j;
        char t;
        for (i = 0; i<2; i++)
        {
                for (j = i + 1; j<5; j++)
                {
                        if (a[i][0] > a[j][0])
                        {
                                t = a[i][0];
                                a[i][0] = a[j][0];
                                a[j][0] = t;
                        }
                }                        
        }
        puts(a[1]);
        return 0;
}

一是像这种给出字符串的二维数组,如a[0][0]这种是对应哪个字符串或者说对应哪个字符串的字母?
a[0][0] = 'o'    a[1][1] = 'w'  a[4][1] = 'i'

二是它要输出的是a[1],这是什么意思呢,怎么就得到fwo了?
a[1]会输出fwo上面说过了,如果没循环之前的结果就是

a[0] = "one"
a[1] = "two"
a[2] = "three"
a[3] = "four"
a[4] = "five"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-8-6 18:19:20 | 显示全部楼层
楼主基础不行啊、
楼上讲了主要的问题我补充一点细节、
1、数组名就代表数组首地址、
2、对于puts函数来说、当输出是一个字符串遇到'\0'标志才结束、
所以给puts函数传入一个字符串首地址参数、就会连续往后读到'\0'输出才结束、
同理、你也可以不传入首地址、一个字符串中间地址、那就输出后面半截字符串、
我还是提供一个例子把:
#include <stdio.h>

int main()
{
        char a[5][10] = { "one","two", "three", "four", "five" };
        int i, j;
        char t;
        for (i = 0; i<2; i++)
        {
                for (j = i + 1; j<5; j++)
                {
                        if (a[i][0] > a[j][0])
                        {
                                t = a[i][0];
                                a[i][0] = a[j][0];
                                a[j][0] = t;
                        }
                }
        }
        puts(&a[1][1]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-7 13:45:16 | 显示全部楼层
廿文廿武 发表于 2016-8-6 17:29
楼主用的什么IDE,神了,你一步一步的调试就知道是什么回事了,前面的FOR循环只是把数组里的元素改来改去, ...

没,这段代码不完全,只是给出了主要代码,是一道题目来着,谢谢你的指导。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-7 13:46:37 | 显示全部楼层
lx_Zz 发表于 2016-8-6 18:19
楼主基础不行啊、
楼上讲了主要的问题我补充一点细节、
1、数组名就代表数组首地址、

是啊,基础不太好,C语言也是最近才开始学,所以遇到很多问题。谢谢你的指导。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 06:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表