
#include "stdio.h" int main() { int i = 0; char (*list_device)[7]; char a1[7] = {1,2,3,4,5,6,7}; list_device = &a1;//这行是对的 list_device[1] = a1;//这行是错的 for( i = 0 ; i < 7 ; i++) { printf("%d ",list_device[0][i]); } return 0; } 两个赋值的内涵好像是一样的,请问为什么会报错呀?报的错就是“assignment error” |
刚刚讨论过数组指针于指针数组,你可以参考下:
https://www.stmcu.org.cn/module/foru ... 450&fromuid=3089512
你的代码
char (*list_device)[7];
表示list_device是一个指针,指向具有7个char变量的数组,list_device的类型是这样的:char (*)[7]。
对于数组
char a1[7];
a1的数组名就是该数组的地址。a1的类型为char [7]类型,&a1的类型是char (*)[7]类型。
所以赋值应该是这样的:
list_device = &a1;
你不能把char [7]赋值给char (*)[7]类型的,也就是list_device = a1;是错的。
printf中应该这么使用才合适:
其实很少像lz这么使用的,对于想操作a1,一般是这样的:
char *p;
p=a1;
但是你的问题主要是一维数组和二维数组混用了。
char *p;
char p2[7];
p = a1;//这行是对的
p2 = a1;//这行是错的
list_device是一个数组指针,即指向一个char [7]型数组的指针。list_device[1] = *(list_device + 1),也就是char [7]数组,是不能作为左值的,就好像:
int a[3] = {0}, b[3] = {0};
a = b; //这行是错的
居然只给了个warnning。
还能运行。。。
我这个非主流的编译器不靠普