关于C语言结构体赋值与传值的问题。 具体请看问题补充。

structtest{inta;intb;intc;}a[3];structtest*p=a,b[3]=p;这样会报错:提示结构体指针变量p无法赋值给结构体数组变量B。可... struct test
{
int a;
int b;
int c;
}a[3];
struct test *p = a,b[3] = p;
这样会报错:提示结构体指针变量p无法赋值给结构体数组变量B。
可为什么用函数传值的方式就不会?
具体如下:
struct test
{
int a;
int b;
int c;
}a[3];
void main()
{
void test(struct test x[]);
struct test *p = a;
test(p);
}
void test(struct test x[])
{
}
求高手解答!!!!!
展开
 我来答
tianyuwuse
2012-08-22 · TA获得超过1117个赞
知道小有建树答主
回答量:494
采纳率:100%
帮助的人:241万
展开全部
首先,p是被定义成一个指向struct test基类型的指针变量,它用于存放指向该类型元素的地址,你定义的b是一个数组,它用于存放struct test类型的变量,当你理解了变量的地址和变量的类型是不同的情形后你就该理解为什么此处你的赋值是不正确的。另外看到楼上的朋友说让写成
struct test *p = a;
struct test b[3] ;
b=p;
这种写法也有问题,因为b是数组名,是常量,因此这样赋值是错误的。
第二个问题: void test(struct test x[]){,,,} 中的struct test x[]也可以写成struct test *x,所以此处的struct test x[]不是数组,只是一个形式上的数组而已,它在编译阶段会被编译器处理成struct test *x(同样如果是int a[],也会被处理成int *a的),所以此处的x和你开始定义的p的类型是一致的,都是struct test *类型。
上帝来自地球
2012-08-21 · TA获得超过1436个赞
知道小有建树答主
回答量:438
采纳率:100%
帮助的人:413万
展开全部
可以传,但是
b[3] = p;是错误的;

正确的应该这么写
struct test *p = a;
struct test b[3] ;
b=p;

详细信息请看结构体定义,不明白还可再问我
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spider_no3
2012-08-21 · 超过26用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:74.1万
展开全部
用函数传值其实也是传的指针,不是给数组赋值,相当于
void test(struct test *x) 在函数的参数里数组都会退化为指针,因此不报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式