| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖
标题:二维数组问题,请教大神!
只看楼主 加入收藏
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
二维数组问题,请教大神!
程序代码:
void ascllout(char (*str)[LENTH],int n)
{
    int i,j;
    char (*temp)[LENTH]=NULL;
    puts("按ASCLL顺序输出字符串列表:");
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
          if (strcmp(str[j],str[j+1])>0)
          {
           temp = str[j];
           str[j]=str[j+1];
           str[j+1]=str[j];
          }
    for(i=0;i<LIMIT1;i++)
    fputs(str[i],stdout);
    puts("请按任意键返回主菜单");
    getch();
    menu(str,n);
}
           temp = str[j];
           str[j]=str[j+1];
           str[j+1]=str[j];
在VS2010环境中,上面这段话报错了,我的意图是让指向数组的指针进行地址交换,而不去交换其本身,说str[j]和str[j+1]不是左值,改怎么改,为什么他们不是左值呢
2014-05-15 16:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
字符串不能像数值那样直接用=赋值

DO IT YOURSELF !
2014-05-15 16:32
寂__痴
Rank: 2
等 级:论坛游民
帖 子:34
专家分:23
注 册:2014-4-25
收藏
得分:0 
字符串的值的交换应该用strcpy把,用一个中间字符串来做转换。

C语言之路,慢慢走,慢慢领悟,才是硬道理!
2014-05-15 17:12
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
收藏
得分:0 
回复 2 楼 wp231957
我赋值的只是字符串的首地址啊,又不是字符串本身
2014-05-15 17:23
hutianlun
Rank: 2
等 级:论坛游民
帖 子:21
专家分:13
注 册:2013-3-28
收藏
得分:0 
回复 3 楼 寂 __ 痴
那样就修改了源文件了,不想那样
2014-05-15 17:23
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
我觉得问题是出在temp = str[j];这句了

总有那身价贱的人给作业贴回复完整的代码
2014-05-15 17:27
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
代码不全,只能大概看下。
void ascllout(char (*str)[LENTH],int n)
为何不写成:
void ascllout(char **str, int n)

    char (*temp)[LENTH]=NULL;
为何不写成:
    char *temp=NULL;
??
2014-05-15 18:43
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:15 
你的str是个行指针,是个单独的指针变量,不是数组。
因而str[j]这种形式并不是数组元素,而是*(str+j)的等价形式。
你的str可想而知是指向数组行的首地址的,因此*(str+j)实际上是该数组下j行的首元素的地址,是一个常量,因此不能赋值。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2014-05-16 09:38
rmbking
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:36
专家分:157
注 册:2014-3-19
收藏
得分:5 
str[j]正如楼上所说,是行首地址,不是数组元素,也不是自己声明的指针,不过它的值是str的地址加上j*LENTH的偏移量,是常量。
这就像你如果声明 char str[3]="abc";这样str的地址是常量,是不可更改的,你只能更改str[i],所以上面的你也只能更改str[i][j],不能更改str[j]。一个道理。
2014-05-16 14:05
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
字符串是不可以这样操作的

我不是砖家,要努力成为砖家。
2014-05-16 14:43
快速回复:二维数组问题,请教大神!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034792 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved