赋值二维数组指针时出现“初始化不兼容指针类型”错误求助
问题分析与修正
你的代码里存在两处类型不匹配的错误,这就是编译报错的核心原因,下面逐个拆解:
1. 指向二维数组的指针赋值错误
artist1是char[4][80]类型的二维数组,当你直接把它作为右值使用时,会自动退化为指向其第一个元素的指针——也就是char (*)[80](指向长度为80的char数组的指针)。而你定义的pb1是char (*)[4][80](指向整个4×80二维数组的指针),这两个类型完全不兼容,不能直接赋值。
正确的写法是取整个二维数组的地址:
char (*pb1)[4][80] = &artist1; char (*pb2)[4][80] = &artist2;
2. 指针数组的类型不匹配
你定义的arrptr是char*[2],也就是用来存储char*类型指针的数组,但pb1、pb2是指向二维数组的指针,类型完全不对。如果你的需求是存储这些二维数组的指针,arrptr的类型需要改成对应类型:
char (*arrptr[2])[4][80] = {pb1, pb2};
关于你说的整数数组正常的原因
你之前操作整数数组时,大概率用的是指向数组行的指针(比如int (*p)[80] = arr;),而不是指向整个二维数组的指针,同时对应的指针数组类型也匹配(比如int (*arrptr[2])[80] = {arr1, arr2};),所以没触发类型错误。
更适合排序/移动操作的写法
如果你的目标是对二维数组的行进行排序、移动,其实没必要用指向整个二维数组的指针,用指向行的指针更方便,代码可以改成这样:
int main() { char artist1[4][80] = {}; char artist2[4][80] = {}; // pb1指向artist1的第一行,可直接通过pb1[i]访问第i行 char (*pb1)[80] = artist1; char (*pb2)[80] = artist2; // 存储指向行的指针的数组,方便批量操作 char (*arrptr[2])[80] = {pb1, pb2}; }
内容的提问来源于stack exchange,提问作者A Mirdha
相关产品推荐
相关产品推荐

