strust
{char mark[12];
int nual;
double num2;}t1,t2;哪一个选项是错的?A t1=t2; B t2.num1=t1.num1;
C t2.mark=t1.mark; D t2.num2=t1.num2;
结构体(struct)定义、使用以及内存分配
C是错的。因为mark是字符数组,你应该用strcpy或者把mark定义成指针。
A和C都有点问题,在题目没有明确说明下,C是直接数组地址复制,内容等于没有复制。而A在没有实现自定义operator=下,也会出现数组地址复制的浅拷贝,也是不正确的做法。
A执行的是浅度复制 只会复制成员指针,不会复制内存,所以是错的。c更是错的,c风格字符串没有直接复制一说
C t2.mark=t1.mark;
数组在 C 语言下不能这样赋值的,因为 数组名 可以看成常量指针。即然是常量,就不能再被赋值,除了定义时。
C项是错误的,因为这是指针赋值,指向同一块内存区域。会引起修改干扰。这是浅拷贝的范畴。
而本题的意识是深拷贝,即t1和t2的结构体各需要一个不同的数组。
每次回答问题都发现好多人回答,弄的我都感觉自己的回答是多余的
C是错的,不能直接复制,在C里需要用strcpy
A,正确。调用默认拷贝构造函数,mark数组会浅拷贝。
B,正确。
C,错误。t1和t2两个对象已经生产,而mark是指针常量(数组名是指针常量),即指针不可以改变,但指针指向的位置可以改变,
你可以看做char const * mark,因为无法给常量赋值,所以把t2.mark赋值给t1.mark错误。
D,正确。
所以我认为这题应该考察的是常量指针和指针常量的区别,及数组名是指针常量。