免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: unistd
打印 上一主题 下一主题

严重声明:C语言中不存在数组的类型!它仅仅是一个概念! [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
131 [报告]
发表于 2009-12-22 16:23 |只看该作者
不过现在想想,我几乎不用C99的新特征写代码.
C99的inline关键字在我看来是新加的里面最有用的东西,我也使用它,但不是因为C99使用它,而是因为gcc

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
132 [报告]
发表于 2009-12-22 16:59 |只看该作者
原帖由 论坛热点 于 2009-12-22 14:44 发表

如果有 char  a1[10] 和 char  a2[5], 这个 memmove(a2, a1, 10) 还可以吗?
如果有 char* p_cha[100/sizeof(char*)]  和  char  p_chb[10][10]  这个 memmove(p_chb, p_cha, 100) 还不可以吗?


试试这个:
        char*  p_cha[2];
        char   p_chb[2][10];

        p_cha[0] = "abc";
        char  *p_ch = "123";
        p_cha[1] = "edf";

        memmove(&p_chb[0][0], p_cha[0], 10);


最后 p_chb 中的内容是什么?

论坛徽章:
0
133 [报告]
发表于 2009-12-22 17:12 |只看该作者

回复 #132 zhujiang73 的帖子

给你修正一个错误:
p_cha[0]的长度是4,你透支给10,那能行么   

修正后:
        char*  p_cha[2];
        char   p_chb[2][10];
        p_cha[0] = "abc";
        p_cha[1] = "edf";
        memmove(&p_chb[0][0], p_cha[0], 4);
        printf("&p_chb[0][0] = %s\n", &p_chb[0][0]);

执行输出:
&p_chb[0][0] = abc

正确呀,有疑问么?

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
134 [报告]
发表于 2009-12-22 17:38 |只看该作者
原帖由 论坛热点 于 2009-12-22 17:12 发表
给你修正一个错误:
p_cha[0]的长度是4,你透支给10,那能行么   

修正后:
        char*  p_cha[2];
        char   p_chb[2][10];
        p_cha[0] = "abc";
        p_cha[1] = "edf";
        memmove(&p_chb[0][0], p_cha ...


>> 你透支给10,那能行么

我就是让他越界,看他是怎么错的。

这个结果和

原帖由 论坛热点 于 2009-12-22 13:56 发表

QUOTE:
原帖由 zhujiang73 于 2009-12-22 13:46 发表



我换个问法  char* p_ch[10]  和  char  p_ch[10][10]  中的  p_ch 类型一样吗。

是一样的,都是char**类型


是矛盾的。

论坛徽章:
0
135 [报告]
发表于 2009-12-22 18:30 |只看该作者

回复 #134 zhujiang73 的帖子

憋了半天,没憋出病呀,小子   

论坛徽章:
0
136 [报告]
发表于 2009-12-22 19:58 |只看该作者
原帖由 论坛热点 于 2009-12-22 18:30 发表
憋了半天,没憋出病呀,小子   

走两步

论坛徽章:
0
137 [报告]
发表于 2009-12-22 22:39 |只看该作者
关于 char[3][3] 与 char** 的类型是否相同,
char Arr2[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}};
char **p_ch;

p_ch=Arr2;  /*此处编译器会警告 ,因为类型不同 */

printf("%i\n",sizeof(char));
printf("%p\n",Arr2);
printf("%p\n",Arr2+1);
printf("%p\n",Arr2+2);
printf("---------------\n");
printf("%i\n",sizeof(char*));
printf("%p\n",p_ch);
printf("%p\n",p_ch+1);
printf("%p\n",p_ch+2);

结果可是不同啊,若char[3][3] 与char ** 类型相同,结果应该相同;

论坛徽章:
0
138 [报告]
发表于 2009-12-22 22:56 |只看该作者
再试试这个;接上贴
char (* pt_of_arr)[3];

pt_of_arr=Arr2;   /* 此时编译器没有警告 */

printf("%p\n",Arr2+1);
printf("%p\n",pt_of_arr + 1);

论坛徽章:
0
139 [报告]
发表于 2009-12-22 23:03 |只看该作者
我因此认为,二维数组中,对应每一行的那个一维数组的类型就是数组类型,无法由指针类型替代

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
140 [报告]
发表于 2009-12-22 23:36 |只看该作者
就这个话题,也能砌高楼。 :mrgreen:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP