C如果将int*作为参数,参数类型为int**,会发生什么?
当我将指针C如果将int*作为参数,参数类型为int**,会发生什么?,c,pointers,parameter-passing,C,Pointers,Parameter Passing,当我将指针int*作为参数,其中参数类型是指针int**的指针时,会发生什么情况 int main(..) { int* local_arr = malloc( 10 * sizeof(int) ); func(local_arr) } void func(int** par) {...} 首先,你至少会得到一个警告 但由于编写函数时要牢记int**参数,因此可能会出现两次取消引用的情况,如果传递int*,这将是一个问题,从而导致未定义的行为。 此外,在这种情况下,函数体中会
int*
作为参数,其中参数类型是指针int**
的指针时,会发生什么情况
int main(..) {
int* local_arr = malloc( 10 * sizeof(int) );
func(local_arr)
}
void func(int** par) {...}
首先,你至少会得到一个警告 但由于编写函数时要牢记
int**
参数,因此可能会出现两次取消引用的情况,如果传递int*
,这将是一个问题,从而导致未定义的行为。
此外,在这种情况下,函数体中会发生类型不匹配。首先,您至少会得到一个警告 但由于编写函数时要牢记
int**
参数,因此可能会出现两次取消引用的情况,如果传递int*
,这将是一个问题,从而导致未定义的行为。
此外,在这种情况下,函数体中会发生类型不匹配。如果sizeof(int)等于sizeof(int*),则不会发生任何情况(警告除外),错误发生在希望将int**参数与**相一致时,如果将其与single*相一致,则不会发生错误,但这不是一个好的做法
void funct(int ** arg){
printf("%i", (int) *arg);
}
int i = 5;
funct((int **) &arg); // will print 5
还要注意的是,它依赖于ABI,可能不适用于任何地方如果sizeof(int)等于sizeof(int*),则不会发生任何情况(警告除外),错误发生在您希望使用**遵从int**参数时,如果使用single*遵从它,则不会发生错误,但这不是一个好的做法
void funct(int ** arg){
printf("%i", (int) *arg);
}
int i = 5;
funct((int **) &arg); // will print 5
还需要注意的是,它依赖于ABI,可能不适用于所有情况为
int**
参数传递int*
参数而不显式转换,这在C语言中是违反约束的。C语言不支持将int*
值隐式转换为int**
类型。您的程序不是有效的C程序,编译器需要通过诊断消息告知您
换句话说,这就是C中通俗的“编译错误”。您的程序是“不可编译的”
即使一些非学究的C编译器同意编译这个程序,这不是C程序,代码的行为不由C语言定义。为
int**
参数传递int*
参数而不显式强制转换在C语言中是违反约束的。C语言不支持将int*
值隐式转换为int**
类型。您的程序不是有效的C程序,编译器需要通过诊断消息告知您
换句话说,这就是C中通俗的“编译错误”。您的程序是“不可编译的”
即使某些非学究式的C编译器同意编译此程序,这也不是C程序,代码的行为也不是由C语言定义的。如果传递的值与声明不匹配,除了从编译器获得严厉警告(如果它允许转换)您将有未定义的行为。如果传递的值与声明不匹配,除了从编译器获得严厉警告(如果它允许转换),您将有未定义的行为。