免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1626 | 回复: 4
打印 上一主题 下一主题

又被二维字符串搞晕了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-13 17:11 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>


int main()
{
    char a[2][20] ;
   
    char str[20] = "Hello" ;

    strcpy(a[1], str) ;
    //strcpy(a+1, str) ;                       // 问题:这句和上面一句不是等效的嘛?
   
    return 0 ;
}

最近编程比较少,连这都晕了,大家帮忙解释一下。。。

char a[2][20] ;

个人理解:
      a[0] 代表一个具有20个元素的数组
      a[1] 代表一个具有20个元素的数组
      
      a+0 == a[0]
      a+1 == a[1]

问题2:我这样理解有什么问题嘛?

问题3:注释的那句如果不用[]表示,应该怎么表示?


thanks a lot!

论坛徽章:
0
2 [报告]
发表于 2009-03-13 17:15 |只看该作者
a[i] = *(a+i);

论坛徽章:
0
3 [报告]
发表于 2009-03-13 17:18 |只看该作者
char a[2][20] ; a是一个二维数组,不过实际上C语言只有一维数组的概念。因此a其实是一个数组元素本身为一维数组的一维数组。

a[1] 表示a的第二个元素,实际类型是一个字符数组,在strcpy函数调用中也就是char *

a + 1,数组名a本身可以看成是一个指向一维数组的指针,而不是指向字符的指针,所以a + 1并不是char *,传给strcpy会得到一个警告信息

论坛徽章:
0
4 [报告]
发表于 2009-03-13 17:44 |只看该作者
楼上正解

论坛徽章:
0
5 [报告]
发表于 2009-03-13 17:47 |只看该作者
楼上正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP