在C语言中如何初始化指向数组的指针数组?赋值遇类型不兼容警告
指针类型不兼容警告的解决办法
你写的代码里,char (*array[10])[20] 声明的是一个包含10个元素的数组,每个元素都是指向长度为20的char数组的指针,也就是每个元素的类型是 char (*)[20]。
而string是长度为20的char数组,在赋值时会自动退化为指向数组首元素的指针,类型是char*。这俩类型完全不匹配,所以编译器报了「赋值时指针类型不兼容」的警告。
给你两种解决思路:
如果你确实需要保留
array的原类型(存指向固定长度char数组的指针),那赋值时要取string的地址,因为&string的类型正好是char (*)[20],和array元素类型匹配:char (*array[10])[20], string[20] = "AEIOU"; array[2] = &string; // 取数组地址 // 访问时要先解引用指针,再访问数组元素 printf("%c", (*array[2])[0]); // 输出'A'如果你的实际需求只是存字符串指针(不需要严格指向固定长度数组),那直接把
array声明改成字符串指针数组就行,这样类型就匹配了:char* array[10], string[20] = "AEIOU"; array[2] = string; // 直接赋值,无警告 printf("%c", array[2][0]); // 输出'A'
内容的提问来源于stack exchange,提问作者Luca Fiorentino Heredia
相关产品推荐
相关产品推荐

