如何解决C语言指针类型不兼容警告?仅可修改bar函数签名
解决指针类型不兼容的警告问题
首先,警告的根源是&foo的类型与bar函数期望的char**不匹配:
- 在
main中,foo是char[1][1]类型的二维数组,&foo的类型为char (*)[1][1](指向1x1字符数组的指针)。 - 原
bar函数的参数类型是char**(指向字符指针的指针),这两种指针本质不同:char**用于指向指针数组,而二维数组是连续内存块,二者无法直接兼容。
由于你只能修改bar的函数签名,正确的做法是将参数类型改为与&foo完全匹配的char (*)[1][1],同时调整函数内部的访问方式:
void bar(char (*foo)[1][1]) { (*foo)[0][0] = '\0'; } int main() { char foo[1][1]; bar(&foo); }
说明:
char (*foo)[1][1]表示foo是指向1x1字符二维数组的指针,与&foo的类型完全一致,不会再触发类型不兼容警告。- 函数内部使用
(*foo)[0][0]是因为foo是指针,需要先解引用得到二维数组本身,再访问其第一个元素。
内容的提问来源于stack exchange,提问作者Artyom Gevorgyan
相关产品推荐
相关产品推荐

