你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

讨论个C语言的问题

[复制链接]
beary 提问时间:2016-1-7 15:41 /
#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”
收藏 1 评论6 发布时间:2016-1-7 15:41

举报

6个回答
moyanming2013 回答时间:2016-1-7 18:19:55
本帖最后由 moyanming2013 于 2016-1-7 18:29 编辑

刚刚讨论过数组指针于指针数组,你可以参考下:
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中应该这么使用才合适:
  1. (*list_device)[i];
复制代码


其实很少像lz这么使用的,对于想操作a1,一般是这样的:
char *p;
p=a1;
qianfan 回答时间:2016-1-7 20:09:46
楼上说的挺清楚的。

但是你的问题主要是一维数组和二维数组混用了。
潇潇雨歇pku 回答时间:2016-1-8 09:44:58
lz可以理解一下以下代码:
        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; //这行是错的
废鱼 回答时间:2016-1-8 15:34:21
C语言中数组不能直接等于数组。可以通过memcpy等函数进行操作。
Mandelbrot_Set 回答时间:2016-1-8 16:34:29
加 -fpermissive
居然只给了个warnning。
还能运行。。。
Mandelbrot_Set 回答时间:2016-1-8 16:43:38
Mandelbrot_Set 发表于 2016-1-8 16:34
加 -fpermissive
居然只给了个warnning。
还能运行。。。

我这个非主流的编译器不靠普

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版