Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C与C+中的数组衰减规则+;? int m[4][5]; int *p = m; P> >我认为C的衰减程度远大于代码> int(*)[5 ] < /代码>然后到 int */COD> > C++似乎只做第一次衰减。 < P>这不是合法的。 example.c:2:6: warning: incompatible pointer types initializing 'int *' with an expression of type 'int [4][5]' [-Wincompatible-pointer-types]_C++_C_Pointers_Multidimensional Array - Fatal编程技术网

C与C+中的数组衰减规则+;? int m[4][5]; int *p = m; P> >我认为C的衰减程度远大于代码> int(*)[5 ] < /代码>然后到 int */COD> > C++似乎只做第一次衰减。 < P>这不是合法的。 example.c:2:6: warning: incompatible pointer types initializing 'int *' with an expression of type 'int [4][5]' [-Wincompatible-pointer-types]

C与C+中的数组衰减规则+;? int m[4][5]; int *p = m; P> >我认为C的衰减程度远大于代码> int(*)[5 ] < /代码>然后到 int */COD> > C++似乎只做第一次衰减。 < P>这不是合法的。 example.c:2:6: warning: incompatible pointer types initializing 'int *' with an expression of type 'int [4][5]' [-Wincompatible-pointer-types],c++,c,pointers,multidimensional-array,C++,C,Pointers,Multidimensional Array,指针类型之间的所有转换(除了void*)都需要在C中进行显式转换。如果编译器允许您进行更多转换,那么这就取决于它,而不是语言标准 根据规范,6.5.4铸造操作员,第3段: 除6.5.16.1中的约束允许的情况外,涉及指针的转换应通过显式转换进行指定 6.5.16.1是void*的例外情况,这是不合法的C.刚才的叮当声测试: example.c:2:6: warning: incompatible pointer types initializing 'int *' with an e

指针类型之间的所有转换(除了
void*
)都需要在C中进行显式转换。如果编译器允许您进行更多转换,那么这就取决于它,而不是语言标准

根据规范,6.5.4铸造操作员,第3段:

除6.5.16.1中的约束允许的情况外,涉及指针的转换应通过显式转换进行指定


6.5.16.1是
void*

的例外情况,这是不合法的C.刚才的叮当声测试:

example.c:2:6: warning: incompatible pointer types initializing 'int *' with an
      expression of type 'int [4][5]' [-Wincompatible-pointer-types]
指针类型之间的所有转换(除了
void*
)都需要在C中进行显式转换。如果编译器允许您进行更多转换,那么这就取决于它,而不是语言标准

根据规范,6.5.4铸造操作员,第3段:

除6.5.16.1中的约束允许的情况外,涉及指针的转换应通过显式转换进行指定


6.5.16.1是
void*

的例外,为什么您认为它在C语言中是合法的?编译器警告不仅仅是为了显示电影效果的花哨文本。启用并注意它们!为什么你认为它在C语言中是合法的?编译器警告不仅仅是为了显示电影效果的花哨文字。启用并注意它们@汉帕桑-不,这完全取决于实现。它可以在空闲时为语言提供任意扩展。。。。例如,当使用
%p
说明符调用
printf
时,如果不将指针强制转换到
void*
,则不会有很多实现出错。这并不意味着它是合法的。违反“应”会使程序格式错误。现在一个实现可能(也不符合标准)接受它,但它不是ISO C。一个实现可以成功地翻译一个无效的程序,只要它至少产生一条诊断消息(§5.1.1.3,及其脚注8)。@HansPassant-不,这完全取决于实现。它可以在空闲时为语言提供任意扩展。。。。例如,当使用
%p
说明符调用
printf
时,如果不将指针强制转换到
void*
,则不会有很多实现出错。这并不意味着它是合法的。违反“应”会使程序格式错误。现在,一个实现可能(也不符合要求)接受它,但它不是ISO C。一个实现可以成功地翻译一个无效的程序,只要它至少产生一条诊断消息(§5.1.1.3,及其脚注8)。