- 主题:结构体赋值
struct T
{
char c[20];
};
T a;
T b;
我知道b.c = a.c不行,但为啥
b = a;
就行。
--
FROM 101.87.69.*
结构体(类)有默认的赋值函数?
【 在 grainbuds 的大作中提到: 】
: struct T
: {
: char c\[20\];
: };
:
: T a;
: T b;
:
: 我知道b.c = a.c不行,但为啥
: b = a;
: 就行。
: --
:
发自「今日水木 on M2007J17C」
--
FROM 222.129.53.*
T.c理解成指针
T理解成一片内存
【 在 grainbuds 的大作中提到: 】
:
: struct T
: {
: char c[20];
: };
--
FROM 5.252.167.*
结构大小确定,直接按字节拷
00007FF77A1B19D9 lea rax,[a]
00007FF77A1B19DD lea rcx,[b]
00007FF77A1B19E1 mov rdi,rax
00007FF77A1B19E4 mov rsi,rcx
00007FF77A1B19E7 mov ecx,14h
00007FF77A1B19EC rep movs byte ptr [rdi],byte ptr [rsi]
有虚表,调用赋值函数
--
FROM 124.193.98.*
数组是不能赋值的
POD类型(trivial类型)的结构赋值,编译器直接给你实现成memcpy
--
FROM 114.241.228.*
从C语言的角度来说,b.c是数组
数组名为常量指针,不能改变指向
数组也不允许这样赋值
【 在 grainbuds 的大作中提到: 】
: struct T
: {
: char c[20];
: ...................
--
FROM 101.224.67.*
c是地址,两个常数地址不能赋值。
【 在 grainbuds 的大作中提到: 】
: struct T
: {
: char c[20];
: ...................
--
FROM 221.221.52.*
历史原因,由于数组整体赋值特别是按值传参数很罕用,所以c语言设计时图方便就让数组在赋值和传参时退化为指针,可以理解为针对常用场景的语法糖。当然这造成了一点语法上的不一致。
go和rust语言这块语法就是一致的了,可以参考。
【 在 grainbuds 的大作中提到: 】
: struct T
: {
: char c[20];
: ...................
--
FROM 222.128.177.*