关于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[])
{
}
求高手解答!!!!! 展开
{
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[])
{
}
求高手解答!!!!! 展开
3个回答
展开全部
首先,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 *类型。
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 *类型。
展开全部
可以传,但是
b[3] = p;是错误的;
正确的应该这么写
struct test *p = a;
struct test b[3] ;
b=p;
详细信息请看结构体定义,不明白还可再问我
b[3] = p;是错误的;
正确的应该这么写
struct test *p = a;
struct test b[3] ;
b=p;
详细信息请看结构体定义,不明白还可再问我
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用函数传值其实也是传的指针,不是给数组赋值,相当于
void test(struct test *x) 在函数的参数里数组都会退化为指针,因此不报错
void test(struct test *x) 在函数的参数里数组都会退化为指针,因此不报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询