| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 sswy 于 2018-8-12 18:52 编辑  
- #include <stdio.h>
 
  
- void func(int b[][3]);
 
  
- void func(int b[][3])
 
 - {
 
 -         printf("%d\n", b[2][2]);
 
 - }
 
  
- int main(void)
 
 - {
 
 -         int a[3][4] = {
 
 -                 {1, 2, 3, 4},
 
 -                 {5, 6, 7, 8},
 
 -                 {9, 10, 11, 12}
 
 -         };
 
  
-         func(a);
 
  
-         return 0;
 
 - }
 
  复制代码 
 
答案是:9 
 
 
此代码进入VS2017编译是不通过的,但是其它编译器可以过, 要把b[][4]才可通过,那是否这道题就是错误的呢?        
      
如果这题是正确的,我是否可以把数组指针,随意指向数组,并可随意指定跨度呢? 
 
比如这样  int (*aa)[3]=&a[1] 报错, 因为a表示,数组第一个元素(这里a跨度4个元素,sizeof(a[0])==int*4  ),而 &a表示的是整个数组,这里的&a[1](&a[1]跨度4个元素)因为和数组指针跨度不匹配.导致“左右类型不一致”,23课后作业已经说明 
 
但是这样写法在其它编译器又可以通过 int (*aa)[3]=&a[1]      
 
 
这道题到底是对是错?还是只是编译器要求规格要求不一样而已,估计是编译器问题,那么如何设置才能让VS编译也通过呢? 
 
 
 
 
 
 |   
 
 
 
 |