| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 622 人关注过本帖
标题:大家好,我是新手,帮我看看这个问题出在那里?想了半天想不通!!!
取消只看楼主 加入收藏
fcwr_520
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-2-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
大家好,我是新手,帮我看看这个问题出在那里?想了半天想不通!!!
  1 #include<stdio.h>
  2 int main()
  3 {
  4     int num[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  5     int *p;
  6     printf("num   =%p\n",num);
  7     printf("num[0]=%p\n",num[0]);
  8     printf("num   =%d\n",sizeof(num));
  9     printf("num[0]=%d\n",sizeof(num[0]));

 10     for(p=num;p<num+12;p++) {
 11         if ((p-num)%4==0) printf("\n");
 12         printf("%3d",*p);}
 13     printf("\n");
 14     return 0;
 15 }
编译时  提示错误  x.c:9:9: 错误:双目运算符 - 操作数(‘int *’和‘int (*)[4]’)无效

但是当把for循环里的num改成num[0]时,却编译通过!为什么num和num[0]两个的地址一样,但是num就不行了?
请高手指出问题出在了哪里!!!


  1 #include<stdio.h>
  2 int main()
  3 {
  4     int num[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  5     int *p;
  6     printf("num   =%p\n",num);
  7     printf("num[0]=%p\n",num[0]);
  8     printf("num   =%d\n",sizeof(num));
  9     printf("num[0]=%d\n",sizeof(num[0]));

 10     for(p=num[0];p<num[0]+12;p++) {
 11         if ((p-num[0])%4==0) printf("\n");
 12         printf("%3d",*p);}
 13     printf("\n");
 14     return 0;
 15 }
把for循环里的num改成num[0]时,就能编译通过了!
这里我用sizeof看了下num和num[0]的大小,num是48,num[0]是16,说明num指的是二维数组的大小,
而num[0]指的是二维数组里一维数组的大小,错误提示p的类型是'int *',而num的类型是'int (*)[4]',
说明num是一个指针,指向的是有4个整型元素的一维数组!


这时我就有疑问了,num,num[0],num[0][0]有啥区别呢?
num 是一个二维数组;
num[0] 是二维数组里的一个一维数组;
num[0][0] 是二维数组里的第一个数组的第一个元素!

其实这里再用个指针变量p2附初值为num的地址,for循环里的num换成p2也可以通过了,因为这时p和p2的类型都为'int *'了!!!



请大家给我推荐本介绍计算机原理方面的书给我看看!!!


[ 本帖最后由 fcwr_520 于 2013-2-6 20:00 编辑 ]
搜索更多相关主题的帖子: include return 
2013-02-06 19:07
fcwr_520
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-2-6
收藏
得分:0 
回复 2楼 幽灵X
敢问为什么p-num[]在运算时会转换成整型呢,难道gcc编译器就这么规定了???
2013-02-06 19:25
fcwr_520
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-2-6
收藏
得分:0 
回复 3楼 幽灵X
请问有什么书是介绍gcc编译器这些规则的呢???
2013-02-06 19:26
fcwr_520
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-2-6
收藏
得分:0 
回复 9楼 Johnsonzhen
那请问for循环里怎么用二维指针操作呢???
2013-02-06 20:48
快速回复:大家好,我是新手,帮我看看这个问题出在那里?想了半天想不通!!!
数据加载中...
 
   



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

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