初始化char**指针触发类型不兼容警告的原因排查
问题原因解析
你的代码出现类型不兼容警告,核心是**&arr的类型和char**完全不匹配**:
- 首先,
char arr[8]是一个长度为8的char数组。当你取它的地址&arr时,得到的指针类型是char (*)[8]——这是一个指向「长度为8的char数组」的指针,并非指向指针的指针。 - 而
char**的含义是「指向char类型指针的指针」,它需要接收的是一个char*变量的地址,而非数组的地址。
举个正确使用char**的例子:先把数组名退化为指向首元素的char*,再取这个指针的地址:
char arr[8]; char *p = arr; // arr退化为char*,指向数组第一个元素 char **arrptr = &p; // 此时&p的类型是char**,和arrptr类型匹配
如果你的需求就是指向这个数组,那应该把arrptr的类型声明为char (*)[8]:
char arr[8]; char (*arrptr)[8] = &arr; // 类型完全匹配,不会有警告
内容的提问来源于stack exchange,提问作者dk3141592
相关产品推荐
相关产品推荐

