马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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编译也通过呢?
|