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

讨论个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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版