为什么不能够 向接受 const char ** 参数的函数,传入 char ** 参数?

it2022-05-09  58

/*为什么不能够 向接受 const char ** 参数的函数,传入 char ** 参数?

网上找来的解答是:可以向接受 const T 的指针的地方传入 T 的指针(任何类型 T 都适用)。但是, 这个允许在带修饰的指针类型上轻微不匹配的规则(明显的例外) 却不能递归应用, 而只能用于最上层。

我自己这样理解:(没有研究过编译器,就是瞎猜的。)1.const char** ccp_ptr;<=> typedef const char * CCP; CCP * CCP_ptr;2.char** cp_ptr; <=> typedef char* CP; CP * CP_ptr;3.const CP * cCP_ptr;4. test:cCP_ptr = CP_ptr; // 这个毫无疑问OKcCP_ptr = cp_ptr; // 这个也OK!!!CCP_ptr = cp_ptr; // error

可以看出,CCP 和 const CP 并不可以等价, 编译器没法转换。

详细的可以研究下面的代码。*/#include <stdio.h>#include <string.h>#include <time.h>

typedef char* CP;typedef const char * CCP;

int main( void ){ char c; char * char_ptr = &c; char ** char_ptr_ptr = &char_ptr; const char * const_char_ptr = "abc"; const char ** const_char_ptr_ptr = &const_char_ptr; CP * CP_ptr = char_ptr_ptr; // ok CCP * CCP_ptr = const_char_ptr_ptr; // ok const CP * const_CP_ptr = CP_ptr; //ok

const_char_ptr = char_ptr; //ok //const_char_ptr_ptr = &char_ptr; //error C2440: '=' : cannot convert from 'char **__w64 ' to 'const char **' //char_ptr_ptr = &const_char_ptr; //cannot convert from 'const char **__w64 ' to 'char **' CP_ptr = &char_ptr; // OK const_CP_ptr = char_ptr_ptr; // OK const_CP_ptr = &char_ptr; // OK

CCP_ptr = &const_char_ptr; //OK //CCP_ptr = CP_ptr; //error C2440: '=' : cannot convert from 'CP *' to 'CCP *' //CCP_ptr = char_ptr_ptr; //error C2440: '=' : cannot convert from 'char **' to 'CCP *' //CCP_ptr = &char_ptr; //error C2440: '=' : cannot convert from 'char **__w64 ' to 'CCP *'

return 0;}

/* 后记:

有对编译器深入研究的,请不吝赐教!*/

转载于:https://www.cnblogs.com/prajna/p/3411254.html


最新回复(0)