随便2--struct pointer

同为struct,如果struct中没有指针, C 和C++可以用等号赋值,但是一旦里面涉及到指针,就不能用等号,要用memcpy

struct A{
char v1[20];
int v2;} a,b;

a = b;

这是没有任何问题的赋值.

struct B{
char *v1;
int v2;} c,d;
c = d;
这种结构体赋值,就需要注意(包括在C++里)。

比如:
struct A{
char v1[20];
int v2;} a,b;
struct * a;

struct* b;
对于指针赋值,实际上也存在同样的情况,即不是数据进行了复制保存而是多了一个指针指向而已,这样一旦b对象释放,a的指向就成了非法的垃圾数据。
所以在c中,自定义类型、数组都是要另外自己定义复制函数的,这主要是代码安全考虑,而不是语言层面考虑。

时间: 2025-01-04 21:46:10

随便2--struct pointer的相关文章

std::map, struct pointer 为key

template < class Key, // map::key_type class T, // map::mapped_type class Compare = less<Key>, // map::key_compare class Alloc = allocator<pair<const Key,T> > // map::allocator_type > class map; struct Cell{ int x; int y; Cell(int

kernel panic 分析(NULL pointer dereference)

It is another typical kernel panic due to invalid address. Panic log: [ 20.896935] c3 554 (netd) Unable to handle kernel NULL pointer dereference at virtual address 00000012 [ 20.906200] c3 554 (netd) pgd = ffffffc02f746000 [ 20.910793] c3 554 (netd)

NYOJ 1241 Interference Signal

Distribution 描述 One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fortunately, they found a map of the castle.The map marks the location of treasures. They agreed to distribute the treasures according to the follow

[bzoj4567][Scoi2016][背单词] (贪心+trie树)

Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ————— 序号  单词 ————— 1 2 …… n-2 n-1 n ————— 然后凤老师告诉 Lweb ,我知道你要学习的单词总共有 n 个,现在我们从上往下完成计划表,对于一个序号为 x 的单词(序号 1...x-1 都已经被填入): 1) 如果存在一个单词是它的后缀,并且

[bzoj4726][POI2017][Sabota?] (树形dp)

Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人也会变成叛徒,并且他的所有下属都会变 成叛徒.你要求出一个最小的x,使得最坏情况下,叛徒的个数不会超过k. Input 第一行包含两个正整数n,k(1<=k<=n<=500000). 接下来n-1行,第i行包含一个正整数p[i+1],表示i+1的父亲是p[i+1](1<=p[i+1]&

PTA 06-图2 Saving James Bond - Easy Version (25分)

This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the world's most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with crocodile

动手打造自己的跨语言异构模块通信解决方案

目前主流的跨语言异构模块通信方案有很多种,比如: 1.跨语言的RPC调用(Apache Thrift):它是Facebook贡献给Apache基金会的开源项目,旨在构建跨语言平台的通信方案.目前它支持非常多种语言,其中当然包括C/C++和Java.Thrift内置一个语言编译器,可以根据Thrift的语法规范,编译生成指定语言的RPC调用模块,功能也是非常的强大.Thrift的语法规范里面定义了数据类型.数据模块结构,有点类似WebService里面的WSDL文件.通过Thrift,我们就可以实

HDOJ1242 Rescue(营救)

Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22286    Accepted Submission(s): 7919 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is d

数据结构-3.4-栈与队列

学习资料:数据结构C语言版 清华大学出版社(以后的略) 这次一次过把栈和队列都写好了.栈和队列 存储结构和顺序表有些像.不过栈是先进后出,队列是先进先出. 栈和队列的应用其实还是挺多的,不过我属于入门学习阶段……所以就先把最基本的代码给实现了……学完整本课内要求的数据结构内容后会将这些各种各样的数据结构应用在别的题目上的!!! 栈:时限定仅在表尾进行插入或者删除操作的线性表.表尾成为栈顶,表头段称为栈底.不含元素的栈称为空栈. 栈的实现: 1 #include<stdio.h> 2 #incl

c语言中的结构体指针类型的cast

1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针,并且 在这个结构体中,第一个结构成员必须也是一个结构体(最好是结构体类型). 那么我们可以这个结构体指针转换为指向这个结构体中第一个成员结构体的指针. 直接看代码: ************************************ /* struct transform for struct