结构体和数组的初始化和赋值
2018-02-12 11:50
323 查看
{}这种语法不能用于结构体的赋值,只能用于初始化。例如这样是错误的:
struct complex_struct z1;
z1 = { 3.0, 4.0 };
结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的;
数组不能相互赋值或初始化 ,既然不能相互赋值,也就不能用数组类型作为函数的参数或返回值
void foo(int a[5])
{
...
}
然后这样调用:
int array[5] = {0};
foo(array);
编译器也不会报错,但这样写并不是传一个数组类型参数的意思。对于数组类型有一条特殊规
则: 数组类型做右值使用时,自动转换成指向数组首元素的指针。所以上面的函数调用其实是传一
个指针类型的参数,而不是数组类型的参数。
这也解释了为什么数组类型不能相互赋值或初始化,例如上面提到的a = b这个表达式, a和b都是数组类型的变量,但是b做右值
使用,自动转换成指针类型,而左边仍然是数组类型,所以编译器报的错是error: incompatible
struct complex_struct z1;
z1 = { 3.0, 4.0 };
结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的;
数组不能相互赋值或初始化 ,既然不能相互赋值,也就不能用数组类型作为函数的参数或返回值
void foo(int a[5])
{
...
}
然后这样调用:
int array[5] = {0};
foo(array);
编译器也不会报错,但这样写并不是传一个数组类型参数的意思。对于数组类型有一条特殊规
则: 数组类型做右值使用时,自动转换成指向数组首元素的指针。所以上面的函数调用其实是传一
个指针类型的参数,而不是数组类型的参数。
这也解释了为什么数组类型不能相互赋值或初始化,例如上面提到的a = b这个表达式, a和b都是数组类型的变量,但是b做右值
使用,自动转换成指针类型,而左边仍然是数组类型,所以编译器报的错是error: incompatible
相关文章推荐
- C语言结构体数组内带字符数组初始化和赋值
- C语言中的结构体,结构体中数组初始化与赋值
- 结构体初始化及结构体指针.结构体数组.结构体函数的调用赋值等
- Java字符串数组初始化和赋值
- 带参构造函数为结构体对象数组赋值的方法
- 数组循环赋值,数组初始化vector,vector insert(),vector push_back() 耗时比较
- 字符数组(C风格字符串)的初始化和赋值
- 无初始化的vector数组赋值
- 结构体初始化中的数组赋值
- c语言二维字符数组的初始化和赋值
- 一种初始化结构体数组的方法
- 五角星自由变换和移动 & 结构体数组初始化 & DIRECTION
- 重新认识memset函数及c++中数组的初始化赋值
- C++程序设计语言练习5.7 结构体数组的初始化
- 字符数组(C风格字符串)的初始化和赋值
- 结构体数组的指针初始化与内存释放
- Oracle集合(联合数组(索引表),嵌套表,变长数组,记录类型的嵌套表)的初始化与赋值,以及它们的区别
- 字符数组与整型数组的初始化和赋值对比
- java数组(定义、赋值和初始化)
- [Go] 复合类型(数组、切片、字典、结构体)变量的 初始化 及 注意事项