beary 发表于 2016-1-7 15:41:16

讨论个C语言的问题

#include "stdio.h"
int main()
{
int i = 0;
char (*list_device);
char a1 = {1,2,3,4,5,6,7};
list_device    = &a1;//这行是对的
list_device = a1;//这行是错的
for( i = 0 ; i < 7 ; i++)
{
        printf("%d ",list_device);
       
}
return 0;

}
两个赋值的内涵好像是一样的,请问为什么会报错呀?报的错就是“assignment error”

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);
表示list_device是一个指针,指向具有7个char变量的数组,list_device的类型是这样的:char (*)。
对于数组
char a1;
a1的数组名就是该数组的地址。a1的类型为char 类型,&a1的类型是char (*)类型。
所以赋值应该是这样的:
list_device = &a1;
你不能把char 赋值给char (*)类型的,也就是list_device = a1;是错的。
printf中应该这么使用才合适:(*list_device);

其实很少像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;
        p = a1;//这行是对的
        p2 = a1;//这行是错的
list_device是一个数组指针,即指向一个char 型数组的指针。list_device = *(list_device + 1),也就是char 数组,是不能作为左值的,就好像:
int a = {0}, b = {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。
还能运行。。。

我这个非主流的编译器不靠普:L
页: [1]
查看完整版本: 讨论个C语言的问题